#include "timestamp.h"
#include "amxml.h"
#include "physmem.h"
+#include <getopt.h>
#define BUFFER_SIZE 32768
void
usage(void)
{
- g_printf(_("Usage: amcheck [-am] [-w] [-sclt] [-M <address>] [-o configoption]* <conf> [host [disk]* ]*\n"));
+ g_printf(_("Usage: amcheck [--version] [-am] [-w] [-sclt] [-M <address>] [--client-verbose] [-o configoption]* <conf> [host [disk]* ]*\n"));
exit(1);
/*NOTREACHED*/
}
static char *displayunit;
static long int unitdivisor;
+static int client_verbose = FALSE;
+static struct option long_options[] = {
+ {"client-verbose", 0, NULL, 1},
+ {"version" , 0, NULL, 2},
+ {NULL, 0, NULL, 0}
+};
+
int
main(
int argc,
int do_clientchk, client_probs;
int do_localchk, do_tapechk, server_probs;
pid_t clientchk_pid, serverchk_pid;
- int opt, tempfd, mainfd;
+ int tempfd, mainfd;
size_t size;
amwait_t retstat;
pid_t pid;
/* process arguments */
cfg_ovr = new_config_overrides(argc/2);
- while((opt = getopt(argc, argv, "M:mawsclto:")) != EOF) {
- switch(opt) {
+ while (1) {
+ int option_index = 0;
+ int c;
+ c = getopt_long (argc, argv, "M:mawsclto:", long_options, &option_index);
+ if (c == -1) {
+ break;
+ }
+
+ switch(c) {
+ case 1: client_verbose = TRUE;
+ break;
+ case 2: printf("amcheck-%s\n", VERSION);
+ return(0);
+ break;
case 'M': if (mailto) {
g_printf(_("Multiple -M options\n"));
exit(1);
}
if (getconf_int(CNF_TAPERFLUSH) > 0 &&
- !getconf_boolean(CNF_AUTOFLUSH)) {
- g_fprintf(outf, _("WARNING: autoflush must be set to 'yes' if taperflush (%d) is greater that 0.\n"),
+ !getconf_no_yes_all(CNF_AUTOFLUSH)) {
+ g_fprintf(outf, _("WARNING: autoflush must be set to 'yes' or 'all' if taperflush (%d) is greater that 0.\n"),
getconf_int(CNF_TAPERFLUSH));
}
g_fprintf(outf,
_("ERROR: application '%s' not found.\n"), dp->application);
} else {
+ char *client_name = application_get_client_name(application);
+ if (client_name && strlen(client_name) > 0 &&
+ !am_has_feature(hostp->features, fe_application_client_name)) {
+ g_fprintf(outf,
+ _("WARNING: %s:%s does not support client-name in application.\n"),
+ hostp->hostname, qname);
+ }
xml_app = xml_application(dp, application, hostp->features);
vstrextend(&l, xml_app, NULL);
amfree(xml_app);
g_fprintf(outf,
_("ERROR: %s:%s does not support SCRIPT-API.\n"),
hostp->hostname, qname);
+ } else {
+ identlist_t pp_scriptlist;
+ for (pp_scriptlist = dp->pp_scriptlist; pp_scriptlist != NULL;
+ pp_scriptlist = pp_scriptlist->next) {
+ pp_script_t *pp_script = lookup_pp_script((char *)pp_scriptlist->data);
+ char *client_name = pp_script_get_client_name(pp_script);;
+ if (client_name && strlen(client_name) > 0 &&
+ !am_has_feature(hostp->features, fe_script_client_name)) {
+ g_fprintf(outf,
+ _("WARNING: %s:%s does not support client-name in script.\n"),
+ hostp->hostname, dp->name);
+ }
+ }
}
}
es = xml_estimate(dp->estimatelist, hostp->features);
g_fprintf(outf, _("\nAmanda Backup Client Hosts Check\n"));
g_fprintf(outf, "--------------------------------\n");
+ run_server_global_scripts(EXECUTE_ON_PRE_AMCHECK, get_config_name());
protocol_init();
hostcount = remote_errors = 0;
for(dp = origq.head; dp != NULL; dp = dp->next) {
hostp = dp->host;
if(hostp->up == HOST_READY && dp->todo == 1) {
+ run_server_host_scripts(EXECUTE_ON_PRE_HOST_AMCHECK,
+ get_config_name(), hostp);
for(dp1 = hostp->disks; dp1 != NULL; dp1 = dp1->hostnext) {
- run_server_scripts(EXECUTE_ON_PRE_HOST_AMCHECK,
- get_config_name(), dp1, -1);
- }
- for(dp1 = hostp->disks; dp1 != NULL; dp1 = dp1->hostnext) {
- run_server_scripts(EXECUTE_ON_PRE_DLE_AMCHECK,
+ run_server_dle_scripts(EXECUTE_ON_PRE_DLE_AMCHECK,
get_config_name(), dp1, -1);
}
start_host(hostp);
}
protocol_run();
+ run_server_global_scripts(EXECUTE_ON_POST_AMCHECK, get_config_name());
g_fprintf(outf, plural(_("Client check: %d host checked in %s seconds."),
_("Client check: %d hosts checked in %s seconds."),
char *t;
int ch;
int tch;
+ gboolean printed_hostname = FALSE;
hostp = (am_host_t *)datap;
hostp->up = HOST_READY;
continue;
}
+ if (client_verbose && !printed_hostname) {
+ g_fprintf(outf, "HOST %s\n", hostp->hostname);
+ printed_hostname = TRUE;
+ }
+
if(strncmp_const(line, "OK ") == 0) {
+ if (client_verbose) {
+ g_fprintf(outf, "%s\n", line);
+ }
continue;
}
if(hostp->up == HOST_DONE) {
security_close_connection(sech, hostp->hostname);
for(dp = hostp->disks; dp != NULL; dp = dp->hostnext) {
- run_server_scripts(EXECUTE_ON_POST_DLE_AMCHECK,
- get_config_name(), dp, -1);
- }
- for(dp = hostp->disks; dp != NULL; dp = dp->hostnext) {
- run_server_scripts(EXECUTE_ON_POST_HOST_AMCHECK,
+ run_server_dle_scripts(EXECUTE_ON_POST_DLE_AMCHECK,
get_config_name(), dp, -1);
}
+ run_server_host_scripts(EXECUTE_ON_POST_HOST_AMCHECK,
+ get_config_name(), hostp);
}
/* try to clean up any defunct processes, since Amanda doesn't wait() for
them explicitly */