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 int genable(int argc, char **argv, char **info)
29 info[1] = strsave(argv[0]);
33 int EnableDcm(int argc, char **argv)
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)
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);
51 int shserv(int argc, char **argv)
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],
61 sprintf(buf, " Interval %s, Target:%s, Script:%s",
62 unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET],
65 if (atoi(argv[SVC_HARDERROR]))
66 sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]);
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]));
74 sprintf(buf, " %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled",
75 atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp);
82 int showserv(int argc, char **argv)
88 if ((status = do_mr_query("get_server_info", 1, qargv, shserv, NULL)))
89 com_err(whoami, status, " while getting server info");
94 char *unparse_interval(int i)
96 static char uibuf[10];
98 sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60);
102 int addserv(int argc, char **argv)
105 char *info[SC_END + 1], **askserv();
107 initserv(argv[1], info);
110 Put_message("Aborted.");
113 if ((status = do_mr_query("add_server_info", SC_END, info, Scream, NULL)))
114 com_err(whoami, status, " while updating server info");
119 char **askserv(char **info)
121 if (GetValueFromUser("Interval", &info[SC_INTERVAL]) == SUB_ERROR)
123 if (GetValueFromUser("Target", &info[SC_TARGET]) == SUB_ERROR)
125 if (GetValueFromUser("Script", &info[SC_SCRIPT]) == SUB_ERROR)
127 if (GetTypeFromUser("Service type", "service", &info[SC_TYPE]) == SUB_ERROR)
129 if (GetValueFromUser("Enable", &info[SC_ENABLE]) == SUB_ERROR)
131 if (GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]) == SUB_ERROR)
133 if (strcasecmp("none", info[SC_ACE_TYPE]))
135 if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR)
142 int gserv(int argc, char **argv, char **cargv)
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;
156 int initserv(char *name, char **argv)
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");
174 int updateserv(int argc, char **argv)
176 char *qargv[SC_END + 1];
179 qargv[0] = (char *)argv[1];
180 if ((status = do_mr_query("get_server_info", 1,
181 qargv, gserv, (char *)qargv)))
183 com_err(whoami, status, " while getting server info");
188 Put_message("Aborted.");
191 if ((status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL)))
192 com_err(whoami, status, " while updating server info");
197 int shhost(int argc, char **argv)
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],
205 if (atoi(argv[SH_HOSTERROR]))
206 sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]);
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);
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]);
226 int showhost(int argc, char **argv)
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");
239 int resetsrverr(int argc, char **argv)
242 if ((status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL)))
243 com_err(whoami, status, " while resetting server error");
248 int resetsrvc(int argc, char **argv)
251 char *qargv[6], buf[BUFSIZ];
253 sprintf(buf, "Reset state for service %s (Y/N)", argv[1]);
262 if ((status = do_mr_query("set_server_internal_flags", 6, qargv,
264 com_err(whoami, status, " while resetting server error");
269 int resethosterr(int argc, char **argv)
273 argv[2] = canonicalize_hostname(strsave(argv[2]));
274 if ((status = do_mr_query("reset_server_host_error", 2, &argv[1],
276 com_err(whoami, status, " while resetting server/host error");
281 int resethost(int argc, char **argv)
284 char *qargv[9], buf[BUFSIZ];
286 sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1],
287 canonicalize_hostname(strsave(argv[2])));
291 qargv[1] = canonicalize_hostname(strsave(argv[2]));
299 if ((status = do_mr_query("set_server_host_internal", 9, qargv,
301 com_err(whoami, status, " while resetting server/host error");
306 int sethostor(int argc, char **argv)
310 argv[2] = canonicalize_hostname(strsave(argv[2]));
311 if ((status = do_mr_query("set_server_host_override", 2, &argv[1],
313 com_err(whoami, status, " while setting server/host override");
318 int ghost(int argc, char **argv, char **cargv)
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;
331 int inithost(char **info)
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;
342 char **askhost(char **info)
344 if (GetValueFromUser("Enable", &info[SHI_ENABLE]) == SUB_ERROR)
346 if (GetValueFromUser("Value 1", &info[SHI_VALUE1]) == SUB_ERROR)
348 if (GetValueFromUser("Value 2", &info[SHI_VALUE2]) == SUB_ERROR)
350 if (GetValueFromUser("Value 3", &info[SHI_VALUE3]) == SUB_ERROR)
356 int updatehost(int argc, char **argv)
358 char *info[SHI_END + 1];
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,
366 com_err(whoami, status, " while getting server/host info");
371 Put_message("Aborted.");
374 if ((status = do_mr_query("update_server_host_info", SHI_END, info,
376 com_err(whoami, status, " while updating server/host info");
382 int addhost(int argc, char **argv)
384 char *info[SHI_END + 1];
387 info[SHI_SERVICE] = strsave(argv[1]);
388 info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
392 Put_message("Aborted.");
395 if ((status = do_mr_query("add_server_host_info", SHI_END, info,
397 com_err(whoami, status, " while adding server/host info");
403 int delserv(int argc, char **argv)
407 if ((status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL)))
408 com_err(whoami, status, " while deleting server info");
413 int delhost(int argc, char **argv)
417 argv[2] = canonicalize_hostname(strsave(argv[2]));
418 if ((status = do_mr_query("delete_server_host_info", 2, &argv[1],
420 com_err(whoami, status, " while deleting server/host info");
425 int pserv(int argc, char **argv, int *count)
427 sprintf(buf, "Service %s", argv[0]);
433 int phost(int argc, char **argv, int *count)
435 sprintf(buf, "Host %s:%s", argv[0], argv[1]);
445 int status, count = 0;
447 argv[0] = argv[2] = "DONTCARE";
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");
453 argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
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");
459 strcpy(buf, "Nothing is in progress at this time");
461 sprintf(buf, "%d update%s in progress at this time", count,
462 count == 1 ? "" : "s");
470 int status, count = 0;
472 argv[0] = argv[1] = "DONTCARE";
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");
478 argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE";
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");
484 strcpy(buf, "Nothing has failed at this time");
486 sprintf(buf, "%d thing%s ha%s failed at this time", count,
487 count == 1 ? "" : "s", count == 1 ? "s" : "ve");
496 if (Confirm("Are you sure you want to start a DCM now"))
498 if ((status = mr_do_update()))
499 com_err(whoami, status, " while triggering update");