int main (int argc, char *argv[]) { flux_t h; int ch = 0; int rc = 0; char *cmd = NULL; const char *j = NULL; const char *ofn = NULL; const char *attr = NULL; const char *jcbstr = NULL; log_init ("flux-jstat"); while ((ch = getopt_long (argc, argv, OPTIONS, longopts, NULL)) != -1) { switch (ch) { case 'h': /* --help */ usage (0); break; case 'o': /* --testout */ ofn = xasprintf ("%s", optarg); break; default: usage (1); break; } } if (optind == argc) usage (1); if (!(h = flux_open (NULL, 0))) err_exit ("flux_open"); flux_log_set_facility (h, "jstat"); cmd = argv[optind++]; if (!strcmp ("notify", cmd)) rc = handle_notify_req (h, (const char *)ofn); else if (!strcmp ("query", cmd) && optind == argc - 2) { j = (const char *)(*(argv+optind)); attr = (const char *)(*(argv+optind+1)); rc = handle_query_req (h, strtol (j, NULL, 10), attr, ofn); } else if (!strcmp ("update", cmd) && optind == argc - 3) { j = (const char *)(*(argv+optind)); attr = (const char *)(*(argv+optind+1)); jcbstr = (const char *)(*(argv+optind+2)); rc = handle_update_req (h, strtol (j, NULL, 10), attr, jcbstr, ofn); } else usage (1); flux_close (h); log_fini (); return (!rc)? 0: 42; }
static void *module_thread (void *arg) { module_t *p = arg; assert (p->magic == MODULE_MAGIC); sigset_t signal_set; int errnum; char *uri = xasprintf ("shmem://%s", zuuid_str (p->uuid)); char **av = NULL; char *rankstr = NULL; int ac; assert (p->zctx); /* Connect to broker socket, enable logging, register built-in services */ if (!(p->h = flux_open (uri, 0))) err_exit ("flux_open %s", uri); if (flux_opt_set (p->h, FLUX_OPT_ZEROMQ_CONTEXT, p->zctx, sizeof (p->zctx)) < 0) err_exit ("flux_opt_set ZEROMQ_CONTEXT"); rankstr = xasprintf ("%u", p->rank); if (flux_attr_fake (p->h, "rank", rankstr, FLUX_ATTRFLAG_IMMUTABLE) < 0) { err ("%s: error faking rank attribute", p->name); goto done; } flux_log_set_facility (p->h, p->name); modservice_register (p->h, p); /* Block all signals */ if (sigfillset (&signal_set) < 0) err_exit ("%s: sigfillset", p->name); if ((errnum = pthread_sigmask (SIG_BLOCK, &signal_set, NULL)) != 0) errn_exit (errnum, "pthread_sigmask"); /* Run the module's main(). */ ac = argz_count (p->argz, p->argz_len); av = xzmalloc (sizeof (av[0]) * (ac + 1)); argz_extract (p->argz, p->argz_len, av); if (p->main(p->h, ac, av) < 0) { err ("%s: mod_main returned error", p->name); goto done; } done: if (rankstr) free (rankstr); if (av) free (av); flux_close (p->h); p->h = NULL; return NULL; }
int main (int argc, char *argv[]) { flux_t h; int ch; char *message = NULL; size_t len = 0; char *priority = "user.notice"; int level; char *facility; int e; log_init ("flux-logger"); while ((ch = getopt_long (argc, argv, OPTIONS, longopts, NULL)) != -1) { switch (ch) { case 'h': /* --help */ usage (); break; case 'p': /* --priority facility.level */ priority = optarg; break; default: usage (); break; } } if (optind == argc) usage (); if ((e = argz_create (argv + optind, &message, &len)) != 0) errn_exit (e, "argz_create"); argz_stringify (message, len, ' '); if (!(h = flux_open (NULL, 0))) err_exit ("flux_open"); if (parse_logstr (priority, &level, &facility) < 0) msg_exit ("bad priority argument"); flux_log_set_facility (h, facility); if (flux_log (h, level, "%s", message) < 0) err_exit ("flux_log"); flux_close (h); free (message); free (facility); log_fini (); return 0; }