3 * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
4 * For copying and distribution information, please see the file
12 #include <moira_site.h>
15 #include "mit-copyright.h"
21 static char buf[BUFSIZ];
22 char *unparse_interval(), *canonicalize_hostname();
25 #define DCM_ENABLE_FLAG 0
27 genable(argc, argv, info)
32 info[1] = strsave(argv[0]);
43 info[0] = "dcm_enable";
44 if (status = do_mr_query("get_value", 1, info, genable, info))
45 com_err(whoami, status, " while getting value of dcm_enable");
46 if (GetValueFromUser("Enable value", &info[1]) == SUB_ERROR)
48 if (status = do_mr_query("update_value", 2, info, Scream, NULL))
49 com_err(whoami, status, " while updating value of dcm_enable");
50 FreeAndClear(&info[0], FALSE);
51 FreeAndClear(&info[1], TRUE);
56 int shserv(argc, argv)
62 Put_message("Name Type Owner Modified");
63 sprintf(tmp, "%s:%s", argv[SVC_ACE_TYPE], argv[SVC_ACE_NAME]);
64 sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s", argv[SVC_SERVICE],
65 argv[SVC_TYPE], tmp, argv[SVC_MODBY], argv[SVC_MODTIME],
68 sprintf(buf, " Interval %s, Target:%s, Script:%s",
69 unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET],
72 if (atoi(argv[SVC_HARDERROR]))
73 sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]);
75 strcpy(tmp, "No error");
76 dfgen = strsave(atot(argv[SVC_DFGEN]));
77 sprintf(buf, " Generated %s; Last Checked %s", dfgen,
78 atot(argv[SVC_DFCHECK]));
81 sprintf(buf, " %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled",
82 atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp);
97 if (status = do_mr_query("get_server_info", 1, qargv, shserv, NULL))
98 com_err(whoami, status, " while getting server info");
103 char *unparse_interval(i)
106 static char uibuf[10];
108 sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60);
117 char *info[SC_END+1], **askserv();
119 initserv(argv[1], info);
120 if (askserv(info) == NULL) {
121 Put_message("Aborted.");
124 if (status = do_mr_query("add_server_info", SC_END, info, Scream, NULL))
125 com_err(whoami, status, " while updating server info");
133 if (GetValueFromUser("Interval", &info[SC_INTERVAL]) == SUB_ERROR)
135 if (GetValueFromUser("Target", &info[SC_TARGET]) == SUB_ERROR)
137 if (GetValueFromUser("Script", &info[SC_SCRIPT]) == SUB_ERROR)
139 if (GetTypeFromUser("Service type", "service", &info[SC_TYPE]) == SUB_ERROR)
141 if (GetValueFromUser("Enable", &info[SC_ENABLE]) == SUB_ERROR)
143 if (GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]) ==
146 if (strcasecmp("none", info[SC_ACE_TYPE]))
147 if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR)
153 gserv(argc, argv, cargv)
158 cargv[SC_SERVICE] = strsave(argv[SVC_SERVICE]);
159 cargv[SC_INTERVAL] = strsave(argv[SVC_INTERVAL]);
160 cargv[SC_TARGET] = strsave(argv[SVC_TARGET]);
161 cargv[SC_SCRIPT] = strsave(argv[SVC_SCRIPT]);
162 cargv[SC_TYPE] = strsave(argv[SVC_TYPE]);
163 cargv[SC_ENABLE] = strsave(argv[SVC_ENABLE]);
164 cargv[SC_ACE_TYPE] = strsave(argv[SVC_ACE_TYPE]);
165 cargv[SC_ACE_NAME] = strsave(argv[SVC_ACE_NAME]);
166 cargv[SC_END] = NULL;
176 argv[SC_SERVICE] = strsave(name);
177 argv[SC_INTERVAL] = strsave("1440");
178 sprintf(tmp, "/tmp/%s.out", name);
179 argv[SC_TARGET] = strsave(tmp);
180 sprintf(tmp, "%s/%s.sh", BIN_DIR, name);
181 argv[SC_SCRIPT] = strsave(tmp);
182 argv[SC_TYPE] = strsave("UNIQUE");
183 argv[SC_ENABLE] = strsave("1");
184 argv[SC_ACE_TYPE] = strsave("LIST");
185 argv[SC_ACE_NAME] = strsave("dbadmin");
190 updateserv(argc, argv)
194 char *qargv[SC_END+1];
197 qargv[0] = (char *)argv[1];
198 if (status = do_mr_query("get_server_info", 1,
199 qargv, gserv, (char *)qargv)) {
200 com_err(whoami, status, " while getting server info");
203 if (askserv(qargv) == NULL) {
204 Put_message("Aborted.");
207 if (status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL))
208 com_err(whoami, status, " while updating server info");
213 int shhost(argc, argv)
219 sprintf(buf, "%s:%s mod by %s on %s with %s", argv[SH_MACHINE],
220 argv[SH_SERVICE], argv[SH_MODBY], argv[SH_MODTIME],
223 if (atoi(argv[SH_HOSTERROR]))
224 sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]);
226 strcpy(tmp, "No error");
227 sprintf(buf, " %s/%s/%s/%s/%s",
228 atoi(argv[SH_ENABLE]) ? "Enabled" : "Disabled",
229 atoi(argv[SH_SUCCESS]) ? "Success" : "Failure",
230 atoi(argv[SH_INPROGRESS]) ? "InProgress" : "Idle",
231 atoi(argv[SH_OVERRIDE]) ? "Override" : "Normal", tmp);
233 Put_message(" Last Try Last Success Value1 Value2 Value3");
234 ltt = strsave(atot(argv[SH_LASTTRY]));
235 sprintf(buf, " %-20s %-20s %-9d %-9d %s", ltt, atot(argv[SH_LASTSUCCESS]),
236 atoi(argv[SH_VALUE1]), atoi(argv[SH_VALUE2]), argv[SH_VALUE3]);
251 qargv[SHI_SERVICE] = argv[1];
252 qargv[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
253 if (status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL))
254 com_err(whoami, status, " getting server/host info");
259 resetsrverr(argc, argv)
264 if (status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL))
265 com_err(whoami, status, " while resetting server error");
270 resetsrvc(argc, argv)
275 char *qargv[6], buf[BUFSIZ];
277 sprintf(buf, "Reset state for service %s (Y/N)", argv[1]);
286 if (status = do_mr_query("set_server_internal_flags", 6, qargv,
288 com_err(whoami, status, " while resetting server error");
293 resethosterr(argc, argv)
299 argv[2] = canonicalize_hostname(strsave(argv[2]));
300 if (status = do_mr_query("reset_server_host_error", 2, &argv[1],
302 com_err(whoami, status, " while resetting server/host error");
307 resethost(argc, argv)
312 char *qargv[9], buf[BUFSIZ];
314 sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1],
315 canonicalize_hostname(strsave(argv[2])));
319 qargv[1] = canonicalize_hostname(strsave(argv[2]));
327 if (status = do_mr_query("set_server_host_internal", 9, qargv,
329 com_err(whoami, status, " while resetting server/host error");
334 sethostor(argc, argv)
340 argv[2] = canonicalize_hostname(strsave(argv[2]));
341 if (status = do_mr_query("set_server_host_override", 2, &argv[1],
343 com_err(whoami, status, " while setting server/host override");
348 ghost(argc, argv, cargv)
353 cargv[SHI_SERVICE] = strsave(argv[SH_SERVICE]);
354 cargv[SHI_MACHINE] = strsave(argv[SH_MACHINE]);
355 cargv[SHI_ENABLE] = strsave(argv[SH_ENABLE]);
356 cargv[SHI_VALUE1] = strsave(argv[SH_VALUE1]);
357 cargv[SHI_VALUE2] = strsave(argv[SH_VALUE2]);
358 cargv[SHI_VALUE3] = strsave(argv[SH_VALUE3]);
359 cargv[SHI_END] = NULL;
367 info[SHI_MACHINE] = canonicalize_hostname(strsave(info[SH_MACHINE]));
368 info[SHI_ENABLE] = strsave("1");
369 info[SHI_VALUE1] = strsave("0");
370 info[SHI_VALUE2] = strsave("0");
371 info[SHI_VALUE3] = strsave("");
372 info[SHI_END] = NULL;
379 if (GetValueFromUser("Enable", &info[SHI_ENABLE]) == SUB_ERROR)
381 if (GetValueFromUser("Value 1", &info[SHI_VALUE1]) == SUB_ERROR)
383 if (GetValueFromUser("Value 2", &info[SHI_VALUE2]) == SUB_ERROR)
385 if (GetValueFromUser("Value 3", &info[SHI_VALUE3]) == SUB_ERROR)
391 updatehost(argc, argv)
395 char *info[SHI_END+1];
398 info[SHI_SERVICE] = strsave(argv[1]);
399 info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
400 if (status = do_mr_query("get_server_host_info", 2, info, ghost,
402 com_err(whoami, status, " while getting server/host info");
405 if (askhost(info) == NULL) {
406 Put_message("Aborted.");
409 if (status = do_mr_query("update_server_host_info", SHI_END, info,
411 com_err(whoami, status, " while updating server/host info");
421 char *info[SHI_END+1];
424 info[SHI_SERVICE] = strsave(argv[1]);
425 info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
427 if (askhost(info) == NULL) {
428 Put_message("Aborted.");
431 if (status = do_mr_query("add_server_host_info", SHI_END, info,
433 com_err(whoami, status, " while adding server/host info");
445 if (status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL))
446 com_err(whoami, status, " while deleting server info");
457 argv[2] = canonicalize_hostname(strsave(argv[2]));
458 if (status = do_mr_query("delete_server_host_info", 2, &argv[1],
460 com_err(whoami, status, " while deleting server/host info");
465 pserv(argc, argv, count)
470 sprintf(buf, "Service %s", argv[0]);
476 phost(argc, argv, count)
481 sprintf(buf, "Host %s:%s", argv[0], argv[1]);
491 int status, count = 0;
493 argv[0] = argv[2] = "DONTCARE";
495 if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
497 status != MR_NO_MATCH)
498 com_err(whoami, status, " while getting servers");
500 argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
502 if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
504 status != MR_NO_MATCH)
505 com_err(whoami, status, " while getting server/hosts");
507 strcpy(buf, "Nothing is in progress at this time");
509 sprintf(buf, "%d update%s in progress at this time", count,
510 count == 1 ? "" : "s");
518 int status, count = 0;
520 argv[0] = argv[1] = "DONTCARE";
522 if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
524 status != MR_NO_MATCH)
525 com_err(whoami, status, " while getting servers");
527 argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE";
529 if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
531 status != MR_NO_MATCH)
532 com_err(whoami, status, " while getting server/hosts");
534 strcpy(buf, "Nothing has failed at this time");
536 sprintf(buf, "%d thing%s ha%s failed at this time", count,
537 count == 1 ? "" : "s", count == 1 ? "s" : "ve");
546 if (Confirm("Are you sure you want to start a DCM now"))
547 if (status = mr_do_update())
548 com_err(whoami, status, " while triggering update");