You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ComputationService.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * SonarQube, open source software quality management tool.
  3. * Copyright (C) 2008-2014 SonarSource
  4. * mailto:contact AT sonarsource DOT com
  5. *
  6. * SonarQube is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * SonarQube is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.computation;
  21. import com.google.common.base.Throwables;
  22. import org.sonar.api.server.ServerSide;
  23. import org.sonar.api.utils.System2;
  24. import org.sonar.api.utils.log.Logger;
  25. import org.sonar.api.utils.log.Loggers;
  26. import org.sonar.api.utils.log.Profiler;
  27. import org.sonar.server.computation.activity.ActivityManager;
  28. import org.sonar.server.computation.step.ComputationStep;
  29. import org.sonar.server.computation.step.ComputationSteps;
  30. import static org.sonar.db.compute.AnalysisReportDto.Status.FAILED;
  31. import static org.sonar.db.compute.AnalysisReportDto.Status.SUCCESS;
  32. @ServerSide
  33. public class ComputationService {
  34. private static final Logger LOG = Loggers.get(ComputationService.class);
  35. private final ReportQueue.Item item;
  36. private final ComputationSteps steps;
  37. private final ActivityManager activityManager;
  38. private final System2 system;
  39. public ComputationService(ReportQueue.Item item, ComputationSteps steps, ActivityManager activityManager, System2 system) {
  40. this.item = item;
  41. this.steps = steps;
  42. this.activityManager = activityManager;
  43. this.system = system;
  44. }
  45. public void process() {
  46. String projectKey = item.dto.getProjectKey();
  47. Profiler profiler = Profiler.create(LOG).startDebug(
  48. String.format("Analysis of project %s (report %d)", projectKey, item.dto.getId())
  49. );
  50. try {
  51. for (ComputationStep step : steps.instances()) {
  52. Profiler stepProfiler = Profiler.createIfDebug(LOG).startDebug(step.getDescription());
  53. step.execute();
  54. stepProfiler.stopDebug();
  55. }
  56. item.dto.setStatus(SUCCESS);
  57. } catch (Throwable e) {
  58. item.dto.setStatus(FAILED);
  59. throw Throwables.propagate(e);
  60. } finally {
  61. item.dto.setFinishedAt(system.now());
  62. activityManager.saveActivity(item.dto);
  63. profiler.stopInfo();
  64. }
  65. }
  66. }