]> source.dussan.org Git - sonarqube.git/blob
394b477cb38eff83052744db118b8a28ebd21af1
[sonarqube.git] /
1 /*
2  * SonarQube :: Process Monitor
3  * Copyright (C) 2009-2016 SonarSource SA
4  * mailto:contact AT sonarsource DOT com
5  *
6  * This program 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  * This program 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.process.monitor;
21
22 import java.util.List;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import static java.util.Objects.requireNonNull;
27
28 public class RestartRequestWatcherThread extends Thread {
29   private static final Logger LOG = LoggerFactory.getLogger(RestartRequestWatcherThread.class);
30   private static int instanceCounter = 0;
31
32   private final Monitor monitor;
33   private final List<ProcessRef> processes;
34   private final long delayMs;
35
36   private boolean watching = true;
37
38   public RestartRequestWatcherThread(Monitor monitor, List<ProcessRef> processes) {
39     this(monitor, processes, 500);
40   }
41
42   public RestartRequestWatcherThread(Monitor monitor, List<ProcessRef> processes, long delayMs) {
43     super("Restart watcher " + (instanceCounter++));
44     this.monitor = requireNonNull(monitor, "monitor can not be null");
45     this.processes = requireNonNull(processes, "processes can not be null");
46     this.delayMs = delayMs;
47   }
48
49   @Override
50   public void run() {
51     while (watching) {
52       for (ProcessRef processCommands : processes) {
53         if (processCommands.getCommands().askedForRestart()) {
54           LOG.info("Process [{}] requested restart", processCommands.getKey());
55           monitor.restartAsync();
56           watching = false;
57         } else {
58           try {
59             Thread.sleep(delayMs);
60           } catch (InterruptedException ignored) {
61             // keep watching
62           }
63         }
64       }
65     }
66   }
67
68   public void stopWatching() {
69     this.watching = false;
70   }
71
72   public boolean isWatching() {
73     return watching;
74   }
75 }