20 int read_args(int argc, char *argv[], struct user_options *opts)
22 int option_index = 0, c;
23 static struct option long_options[] = {
24 { .val = 'j', .has_arg = 1, .name = "jobs", },
25 { .val = 'c', .has_arg = 1, .name = "config", },
26 { .val = 'd', .has_arg = 1, .name = "dump-default", },
29 char short_options[] = "j:c:d:";
32 c = getopt_long(argc, argv, short_options, long_options,
40 opts->max_jobs = atoi(optarg);
44 opts->config_file = optarg;
48 opts->dump_defaults = 1;
49 opts->config_file = optarg;
59 int main(int argc, char *argv[])
61 struct user_options opts;
62 struct rrd_database *db, **db_list = NULL;
66 bzero(&opts, sizeof(opts));
68 if (read_args(argc, argv, &opts) < 0)
71 if (opts.dump_defaults) {
72 ret = write_database(opts.config_file, default_rrds);
77 db_list = populate_database(opts.config_file);
79 db_list = default_rrds;
84 if (rrdtool_create_missing_databases(db_list))
87 if (init_jobcontrol(opts.max_jobs))
95 pr_info("loop start\n");
97 * Update all databases parallel in one shot
99 while ((db = get_outdated_db(db_list)))
100 rrdtool_update_data(db);
102 sleeptime = get_next_update(db_list, &db_name);
104 t = time(0) + sleeptime;
105 strftime(timestr, sizeof(timestr), "%T", localtime(&t));
106 pr_info("Next scheduled event \"%s\" at %s, in %d seconds\n",
107 db_name, timestr, sleeptime);
109 poll_job_requests(sleeptime);