1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.waarp.vitam.ingest;
22
23 import fr.gouv.vitam.access.external.client.AdminExternalClient;
24 import fr.gouv.vitam.access.external.client.AdminExternalClientFactory;
25 import fr.gouv.vitam.ingest.external.client.IngestExternalClient;
26 import org.apache.commons.cli.CommandLine;
27 import org.apache.commons.cli.CommandLineParser;
28 import org.apache.commons.cli.DefaultParser;
29 import org.apache.commons.cli.HelpFormatter;
30 import org.apache.commons.cli.Options;
31 import org.apache.commons.cli.ParseException;
32 import org.waarp.common.logging.WaarpLogger;
33 import org.waarp.common.logging.WaarpLoggerFactory;
34 import org.waarp.common.utility.Version;
35 import org.waarp.common.utility.WaarpShutdownHook;
36 import org.waarp.openr66.configuration.FileBasedConfiguration;
37 import org.waarp.openr66.protocol.configuration.Configuration;
38 import org.waarp.vitam.common.WaarpCommon;
39 import org.waarp.vitam.common.WaarpCommon.MonitorOption;
40 import org.waarp.vitam.common.WaarpMonitor;
41 import org.waarp.vitam.common.WaarpVitamShutdownHook;
42 import org.waarp.vitam.common.WaarpVitamShutdownHook.WaarpVitamShutdownConfiguration;
43
44 import java.io.File;
45
46
47
48
49
50 public class IngestMonitor extends WaarpMonitor {
51
52
53
54 private static final WaarpLogger logger =
55 WaarpLoggerFactory.getLogger(IngestMonitor.class);
56
57 private static File waarpConfigurationFile;
58
59 private final IngestRequestFactory factory;
60 private final IngestManager ingestManager;
61
62
63
64
65
66
67
68
69
70 IngestMonitor(final long elapseTime, final File stopFile,
71 final IngestRequestFactory factory,
72 final AdminExternalClientFactory adminFactory,
73 final IngestManager ingestManager) {
74 super(stopFile, adminFactory, elapseTime);
75 this.factory = factory;
76 this.ingestManager = ingestManager;
77 if (WaarpShutdownHook.shutdownHook == null) {
78 new WaarpVitamShutdownHook(new WaarpVitamShutdownConfiguration(this));
79 WaarpVitamShutdownHook.addShutdownHook();
80 }
81 }
82
83
84
85
86
87
88
89 public static void main(String[] args) {
90 Options options = getOptions();
91
92 if (args.length == 0 || WaarpCommon.checkHelp(args)) {
93 printHelp(options);
94 return;
95 }
96 final IngestMonitor ingestMonitor;
97 try {
98 ingestMonitor = getIngestMonitor(options, args);
99 } catch (ParseException e) {
100 logger.error("Error while initializing {}", IngestMonitor.class.getName(),
101 e);
102 printHelp(options);
103 return;
104 }
105 if (!FileBasedConfiguration
106 .setSubmitClientConfigurationFromXml(Configuration.configuration,
107 waarpConfigurationFile
108 .getAbsolutePath())) {
109 logger.error("Cannot load Waarp Configuration");
110 return;
111 }
112 ingestMonitor.invoke();
113 }
114
115
116
117
118
119
120 private static Options getOptions() {
121 Options options = new Options();
122 MonitorOption.setStandardMonitorOptions(options);
123 MonitorOption.addRetryMonitorOptions(options);
124 options.addOption(IngestRequestFactory.getDirectoryOption());
125 return options;
126 }
127
128
129
130
131
132
133 private static void printHelp(Options options) {
134 HelpFormatter formatter = new HelpFormatter();
135 formatter.printHelp(IngestMonitor.class.getSimpleName(),
136 "Version: " + Version.fullIdentifier(), options,
137 WaarpCommon.FOR_SIMPLE_MANDATORY_ARGUMENTS, true);
138 }
139
140
141
142
143
144
145
146
147
148
149
150 private static IngestMonitor getIngestMonitor(Options options, String[] args)
151 throws ParseException {
152 CommandLineParser parser = new DefaultParser();
153 CommandLine cmd = parser.parse(options, args);
154 IngestRequestFactory.parseDirectoryOption(cmd);
155 MonitorOption monitorOption =
156 WaarpCommon.MonitorOption.gestMonitorOption(cmd, args);
157 waarpConfigurationFile = new File(monitorOption.getWaarpConfiguration());
158 return new IngestMonitor(monitorOption.getElapseInSecond() * 1000L,
159 new File(monitorOption.getStopFilePath()),
160 IngestRequestFactory.getInstance(),
161 AdminExternalClientFactory.getInstance(),
162 new IngestManager());
163 }
164
165
166
167
168 public void invoke() {
169 try (IngestExternalClient client = factory.getClient();
170 AdminExternalClient adminExternalClient = getAdminFactory()
171 .getClient()) {
172 logger.warn("Start of {}", IngestMonitor.class.getName());
173 while (!isShutdown()) {
174 ingestManager
175 .retryAllExistingFiles(factory, client, adminExternalClient, this);
176 Thread.sleep(getElapseTime());
177 }
178 setShutdown(true);
179 logger.warn("Stop of {}", IngestMonitor.class.getName());
180 } catch (InterruptedException e) {
181 logger.error("{} will stop", IngestMonitor.class.getName(), e);
182 }
183 }
184
185 }