]> andersk Git - moira.git/blob - clients/moira/dcmmaint.c
103147afcba22e8676f4b48676d20dc557b31d42
[moira.git] / clients / moira / dcmmaint.c
1 /* $Header$
2  *
3  * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
4  * For copying and distribution information, please see the file
5  * <mit-copyright.h>.
6  */
7
8 #include <stdio.h>
9 #include <string.h>
10 #include <ctype.h>
11 #include <moira.h>
12 #include <moira_site.h>
13 #include <menu.h>
14
15 #include "mit-copyright.h"
16 #include "defs.h"
17 #include "f_defs.h"
18 #include "globals.h"
19
20 extern char *whoami;
21 static char buf[BUFSIZ];
22 char *unparse_interval(), *canonicalize_hostname();
23 char *atot();
24
25 #define DCM_ENABLE_FLAG 0
26
27 int genable(int argc, char **argv, char **info)
28 {
29   info[1] = strsave(argv[0]);
30   return MR_CONT;
31 }
32
33 int EnableDcm(int argc, char **argv)
34 {
35   int status;
36   char *info[3];
37
38   info[0] = "dcm_enable";
39   if ((status = do_mr_query("get_value", 1, info, genable, info)))
40     com_err(whoami, status, " while getting value of dcm_enable");
41   if (GetValueFromUser("Enable value", &info[1]) == SUB_ERROR)
42     return DM_NORMAL;
43   if ((status = do_mr_query("update_value", 2, info, Scream, NULL)))
44     com_err(whoami, status, " while updating value of dcm_enable");
45   FreeAndClear(&info[0], FALSE);
46   FreeAndClear(&info[1], TRUE);
47   return DM_NORMAL;
48 }
49
50
51 int shserv(int argc, char **argv)
52 {
53   char tmp[64], *dfgen;
54
55   Put_message("Name       Type     Owner       Modified");
56   sprintf(tmp, "%s:%s", argv[SVC_ACE_TYPE], argv[SVC_ACE_NAME]);
57   sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s", argv[SVC_SERVICE],
58           argv[SVC_TYPE], tmp, argv[SVC_MODBY], argv[SVC_MODTIME],
59           argv[SVC_MODWITH]);
60   Put_message(buf);
61   sprintf(buf, "  Interval %s, Target:%s, Script:%s",
62           unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET],
63           argv[SVC_SCRIPT]);
64   Put_message(buf);
65   if (atoi(argv[SVC_HARDERROR]))
66     sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]);
67   else
68     strcpy(tmp, "No error");
69   dfgen = strsave(atot(argv[SVC_DFGEN]));
70   sprintf(buf, "  Generated %s; Last Checked %s", dfgen,
71           atot(argv[SVC_DFCHECK]));
72   free(dfgen);
73   Put_message(buf);
74   sprintf(buf, "  %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled",
75           atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp);
76   Put_message(buf);
77   Put_message("");
78   return MR_CONT;
79 }
80
81
82 int showserv(int argc, char **argv)
83 {
84   char *qargv[1];
85   int status;
86
87   qargv[0] = argv[1];
88   if ((status = do_mr_query("get_server_info", 1, qargv, shserv, NULL)))
89     com_err(whoami, status, " while getting server info");
90   return DM_NORMAL;
91 }
92
93
94 char *unparse_interval(int i)
95 {
96   static char uibuf[10];
97
98   sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60);
99   return uibuf;
100 }
101
102 int addserv(int argc, char **argv)
103 {
104   int status;
105   char *info[SC_END + 1], **askserv();
106
107   initserv(argv[1], info);
108   if (!askserv(info))
109     {
110       Put_message("Aborted.");
111       return DM_NORMAL;
112     }
113   if ((status = do_mr_query("add_server_info", SC_END, info, Scream, NULL)))
114     com_err(whoami, status, " while updating server info");
115   FreeInfo(info);
116   return DM_NORMAL;
117 }
118
119 char **askserv(char **info)
120 {
121   if (GetValueFromUser("Interval", &info[SC_INTERVAL]) == SUB_ERROR)
122     return NULL;
123   if (GetValueFromUser("Target", &info[SC_TARGET]) == SUB_ERROR)
124     return NULL;
125   if (GetValueFromUser("Script", &info[SC_SCRIPT]) == SUB_ERROR)
126     return NULL;
127   if (GetTypeFromUser("Service type", "service", &info[SC_TYPE]) == SUB_ERROR)
128     return NULL;
129   if (GetValueFromUser("Enable", &info[SC_ENABLE]) == SUB_ERROR)
130     return NULL;
131   if (GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]) == SUB_ERROR)
132     return NULL;
133   if (strcasecmp("none", info[SC_ACE_TYPE]))
134     {
135       if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR)
136         return NULL;
137     }
138   return info;
139 }
140
141
142 int gserv(int argc, char **argv, char **cargv)
143 {
144   cargv[SC_SERVICE] = strsave(argv[SVC_SERVICE]);
145   cargv[SC_INTERVAL] = strsave(argv[SVC_INTERVAL]);
146   cargv[SC_TARGET] = strsave(argv[SVC_TARGET]);
147   cargv[SC_SCRIPT] = strsave(argv[SVC_SCRIPT]);
148   cargv[SC_TYPE] = strsave(argv[SVC_TYPE]);
149   cargv[SC_ENABLE] = strsave(argv[SVC_ENABLE]);
150   cargv[SC_ACE_TYPE] = strsave(argv[SVC_ACE_TYPE]);
151   cargv[SC_ACE_NAME] = strsave(argv[SVC_ACE_NAME]);
152   cargv[SC_END] = NULL;
153   return MR_CONT;
154 }
155
156 int initserv(char *name, char **argv)
157 {
158   char tmp[BUFSIZ];
159
160   argv[SC_SERVICE] = strsave(name);
161   argv[SC_INTERVAL] = strsave("1440");
162   sprintf(tmp, "/tmp/%s.out", name);
163   argv[SC_TARGET] = strsave(tmp);
164   sprintf(tmp, "%s/%s.sh", BIN_DIR, name);
165   argv[SC_SCRIPT] = strsave(tmp);
166   argv[SC_TYPE] = strsave("UNIQUE");
167   argv[SC_ENABLE] = strsave("1");
168   argv[SC_ACE_TYPE] = strsave("LIST");
169   argv[SC_ACE_NAME] = strsave("dbadmin");
170   argv[SC_END] = NULL;
171 }
172
173
174 int updateserv(int argc, char **argv)
175 {
176   char *qargv[SC_END + 1];
177   int status;
178
179   qargv[0] = (char *)argv[1];
180   if ((status = do_mr_query("get_server_info", 1,
181                             qargv, gserv, (char *)qargv)))
182     {
183       com_err(whoami, status, " while getting server info");
184       return DM_NORMAL;
185     }
186   if (!askserv(qargv))
187     {
188       Put_message("Aborted.");
189       return DM_NORMAL;
190     }
191   if ((status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL)))
192     com_err(whoami, status, " while updating server info");
193   return DM_NORMAL;
194 }
195
196
197 int shhost(int argc, char **argv)
198 {
199   char tmp[64], *ltt;
200
201   sprintf(buf, "%s:%s  mod by %s on %s with %s", argv[SH_MACHINE],
202           argv[SH_SERVICE], argv[SH_MODBY], argv[SH_MODTIME],
203           argv[SH_MODWITH]);
204   Put_message(buf);
205   if (atoi(argv[SH_HOSTERROR]))
206     sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]);
207   else
208     strcpy(tmp, "No error");
209   sprintf(buf, "  %s/%s/%s/%s/%s",
210           atoi(argv[SH_ENABLE]) ? "Enabled" : "Disabled",
211           atoi(argv[SH_SUCCESS]) ? "Success" : "Failure",
212           atoi(argv[SH_INPROGRESS]) ? "InProgress" : "Idle",
213           atoi(argv[SH_OVERRIDE]) ? "Override" : "Normal", tmp);
214   Put_message(buf);
215   Put_message("  Last Try             Last Success         Value1    Value2    Value3");
216   ltt = strsave(atot(argv[SH_LASTTRY]));
217   sprintf(buf, "  %-20s %-20s %-9d %-9d %s", ltt, atot(argv[SH_LASTSUCCESS]),
218           atoi(argv[SH_VALUE1]), atoi(argv[SH_VALUE2]), argv[SH_VALUE3]);
219   free(ltt);
220   Put_message(buf);
221   Put_message("");
222   return MR_CONT;
223 }
224
225
226 int showhost(int argc, char **argv)
227 {
228   char *qargv[2];
229   int status;
230
231   qargv[SHI_SERVICE] = argv[1];
232   qargv[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
233   if ((status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL)))
234     com_err(whoami, status, " getting server/host info");
235   return DM_NORMAL;
236 }
237
238
239 int resetsrverr(int argc, char **argv)
240 {
241   int status;
242   if ((status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL)))
243     com_err(whoami, status, " while resetting server error");
244   return DM_NORMAL;
245 }
246
247
248 int resetsrvc(int argc, char **argv)
249 {
250   int status;
251   char *qargv[6], buf[BUFSIZ];
252
253   sprintf(buf, "Reset state for service %s (Y/N)", argv[1]);
254   if (!Confirm(buf))
255     return DM_NORMAL;
256   qargv[0] = argv[1];
257   qargv[1] = "0";
258   qargv[2] = "0";
259   qargv[3] = "0";
260   qargv[4] = "0";
261   qargv[5] = "";
262   if ((status = do_mr_query("set_server_internal_flags", 6, qargv,
263                             Scream, NULL)))
264     com_err(whoami, status, " while resetting server error");
265   return DM_NORMAL;
266 }
267
268
269 int resethosterr(int argc, char **argv)
270 {
271   int status;
272
273   argv[2] = canonicalize_hostname(strsave(argv[2]));
274   if ((status = do_mr_query("reset_server_host_error", 2, &argv[1],
275                             Scream, NULL)))
276     com_err(whoami, status, " while resetting server/host error");
277   return DM_NORMAL;
278 }
279
280
281 int resethost(int argc, char **argv)
282 {
283   int status;
284   char *qargv[9], buf[BUFSIZ];
285
286   sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1],
287           canonicalize_hostname(strsave(argv[2])));
288   if (!Confirm(buf))
289     return DM_NORMAL;
290   qargv[0] = argv[1];
291   qargv[1] = canonicalize_hostname(strsave(argv[2]));
292   qargv[2] = "0";
293   qargv[3] = "0";
294   qargv[4] = "0";
295   qargv[5] = "0";
296   qargv[6] = "";
297   qargv[7] = "0";
298   qargv[8] = "0";
299   if ((status = do_mr_query("set_server_host_internal", 9, qargv,
300                             Scream, NULL)))
301     com_err(whoami, status, " while resetting server/host error");
302   return DM_NORMAL;
303 }
304
305
306 int sethostor(int argc, char **argv)
307 {
308   int status;
309
310   argv[2] = canonicalize_hostname(strsave(argv[2]));
311   if ((status = do_mr_query("set_server_host_override", 2, &argv[1],
312                             Scream, NULL)))
313     com_err(whoami, status, " while setting server/host override");
314   return DM_NORMAL;
315 }
316
317
318 int ghost(int argc, char **argv, char **cargv)
319 {
320   cargv[SHI_SERVICE] = strsave(argv[SH_SERVICE]);
321   cargv[SHI_MACHINE] = strsave(argv[SH_MACHINE]);
322   cargv[SHI_ENABLE] = strsave(argv[SH_ENABLE]);
323   cargv[SHI_VALUE1] = strsave(argv[SH_VALUE1]);
324   cargv[SHI_VALUE2] = strsave(argv[SH_VALUE2]);
325   cargv[SHI_VALUE3] = strsave(argv[SH_VALUE3]);
326   cargv[SHI_END] = NULL;
327   return MR_CONT;
328 }
329
330
331 int inithost(char **info)
332 {
333   info[SHI_MACHINE] = canonicalize_hostname(strsave(info[SH_MACHINE]));
334   info[SHI_ENABLE] = strsave("1");
335   info[SHI_VALUE1] = strsave("0");
336   info[SHI_VALUE2] = strsave("0");
337   info[SHI_VALUE3] = strsave("");
338   info[SHI_END] = NULL;
339 }
340
341
342 char **askhost(char **info)
343 {
344   if (GetValueFromUser("Enable", &info[SHI_ENABLE]) == SUB_ERROR)
345     return NULL;
346   if (GetValueFromUser("Value 1", &info[SHI_VALUE1]) == SUB_ERROR)
347     return NULL;
348   if (GetValueFromUser("Value 2", &info[SHI_VALUE2]) == SUB_ERROR)
349     return NULL;
350   if (GetValueFromUser("Value 3", &info[SHI_VALUE3]) == SUB_ERROR)
351     return NULL;
352   return info;
353 }
354
355
356 int updatehost(int argc, char **argv)
357 {
358   char *info[SHI_END + 1];
359   int status;
360
361   info[SHI_SERVICE] = strsave(argv[1]);
362   info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
363   if ((status = do_mr_query("get_server_host_info", 2, info, ghost,
364                             (char *)info)))
365     {
366       com_err(whoami, status, " while getting server/host info");
367       return DM_NORMAL;
368     }
369   if (!askhost(info))
370     {
371       Put_message("Aborted.");
372       return DM_NORMAL;
373     }
374   if ((status = do_mr_query("update_server_host_info", SHI_END, info,
375                             Scream, NULL)))
376     com_err(whoami, status, " while updating server/host info");
377   FreeInfo(info);
378   return DM_NORMAL;
379 }
380
381
382 int addhost(int argc, char **argv)
383 {
384   char *info[SHI_END + 1];
385   int status;
386
387   info[SHI_SERVICE] = strsave(argv[1]);
388   info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
389   inithost(info);
390   if (!askhost(info))
391     {
392       Put_message("Aborted.");
393       return DM_NORMAL;
394     }
395   if ((status = do_mr_query("add_server_host_info", SHI_END, info,
396                             Scream, NULL)))
397     com_err(whoami, status, " while adding server/host info");
398   FreeInfo(info);
399   return DM_NORMAL;
400 }
401
402
403 int delserv(int argc, char **argv)
404 {
405   int status;
406
407   if ((status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL)))
408     com_err(whoami, status, " while deleting server info");
409   return DM_NORMAL;
410 }
411
412
413 int delhost(int argc, char **argv)
414 {
415   int status;
416
417   argv[2] = canonicalize_hostname(strsave(argv[2]));
418   if ((status = do_mr_query("delete_server_host_info", 2, &argv[1],
419                             Scream, NULL)))
420     com_err(whoami, status, " while deleting server/host info");
421   return DM_NORMAL;
422 }
423
424
425 int pserv(int argc, char **argv, int *count)
426 {
427   sprintf(buf, "Service %s", argv[0]);
428   Put_message(buf);
429   (*count)++;
430   return MR_CONT;
431 }
432
433 int phost(int argc, char **argv, int *count)
434 {
435   sprintf(buf, "Host %s:%s", argv[0], argv[1]);
436   Put_message(buf);
437   (*count)++;
438   return MR_CONT;
439 }
440
441
442 int InProgress(void)
443 {
444   char *argv[6];
445   int status, count = 0;
446
447   argv[0] = argv[2] = "DONTCARE";
448   argv[1] = "TRUE";
449   if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
450                             (char *)&count)) && status != MR_NO_MATCH)
451     com_err(whoami, status, " while getting servers");
452   argv[0] = "*";
453   argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
454   argv[4] = "TRUE";
455   if ((status = do_mr_query("qualified_get_server_host", 6, argv, phost,
456                             (char *)&count)) && status != MR_NO_MATCH)
457     com_err(whoami, status, " while getting server/hosts");
458   if (!count)
459     strcpy(buf, "Nothing is in progress at this time");
460   else
461     sprintf(buf, "%d update%s in progress at this time", count,
462             count == 1 ? "" : "s");
463   Put_message(buf);
464   return DM_NORMAL;
465 }
466
467 int DcmFailed(void)
468 {
469   char *argv[6];
470   int status, count = 0;
471
472   argv[0] = argv[1] = "DONTCARE";
473   argv[2] = "TRUE";
474   if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
475                             (char *)&count)) && status != MR_NO_MATCH)
476     com_err(whoami, status, " while getting servers");
477   argv[0] = "*";
478   argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE";
479   argv[5] = "TRUE";
480   if ((status = do_mr_query("qualified_get_server_host", 6, argv, phost,
481                             (char *)&count)) && status != MR_NO_MATCH)
482     com_err(whoami, status, " while getting server/hosts");
483   if (!count)
484     strcpy(buf, "Nothing has failed at this time");
485   else
486     sprintf(buf, "%d thing%s ha%s failed at this time", count,
487             count == 1 ? "" : "s", count == 1 ? "s" : "ve");
488   Put_message(buf);
489   return DM_NORMAL;
490 }
491
492
493 int Dcm(void)
494 {
495   int status;
496   if (Confirm("Are you sure you want to start a DCM now"))
497     {
498       if ((status = mr_do_update()))
499         com_err(whoami, status, " while triggering update");
500     }
501   return DM_NORMAL;
502 }
This page took 0.061884 seconds and 3 git commands to generate.