source: ogServer-Git/src/main.c @ ac3ce22

Last change on this file since ac3ce22 was a7cce8d, checked in by OpenGnSys Support Team <soporte-og@…>, 3 years ago

ogServer is AGPLv3+

Update license header in files.

  • Property mode set to 100644
File size: 2.4 KB
RevLine 
[48de515]1/*
[a7cce8d]2 * Copyright (C) 2020-2021 Soleta Networks <info@soleta.eu>
[48de515]3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU Affero General Public License as published by the
[a7cce8d]6 * Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
[48de515]8 */
9
10#include "ogAdmServer.h"
11#include "dbi.h"
12#include "utils.h"
13#include "list.h"
14#include "rest.h"
15#include "client.h"
16#include "json.h"
17#include "schedule.h"
18#include "core.h"
[866b6c5]19#include "cfg.h"
[48de515]20#include <syslog.h>
[7500700]21#include <getopt.h>
22
23static struct option og_server_opts[] = {
24        { "config-file", 1, 0, 'f' },
25        { NULL },
26};
[48de515]27
[96090fd]28#define OG_SERVER_CFG_JSON      "/opt/opengnsys/cfg/ogserver.json"
[d89d6c6]29#define OG_SERVER_REPO_PATH     "/opt/opengnsys/images"
[866b6c5]30
[3cea4bb]31struct og_server_cfg ogconfig = {
[d89d6c6]32        .repo   = {
33                .dir    = OG_SERVER_REPO_PATH,
34        },
35};
[f068a79]36
[48de515]37int main(int argc, char *argv[])
38{
[7500700]39        char config_file[PATH_MAX + 1] = OG_SERVER_CFG_JSON;
[48de515]40        struct ev_io ev_io_server_rest, ev_io_agent_rest;
[7500700]41        int val;
[48de515]42
43        og_loop = ev_default_loop(0);
44
45        if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
46                exit(EXIT_FAILURE);
47
[1a406b2]48        openlog("ogserver", LOG_PID, LOG_DAEMON);
[48de515]49
[7500700]50        while (1) {
51                val = getopt_long(argc, argv, "f:l:d:", og_server_opts, NULL);
52                if (val < 0)
53                        break;
54
55                switch (val) {
56                case 'f':
57                        snprintf(config_file, sizeof(config_file), "%s", optarg);
58                        break;
59                case 'l':
60                case 'd':
61                        /* ignore, legacy options */
62                        break;
63                case '?':
64                        return EXIT_FAILURE;
65                default:
66                        break;
67                }
[48de515]68        }
69
[3cea4bb]70        if (parse_json_config(config_file, &ogconfig) < 0)
[7500700]71                return EXIT_FAILURE;
72
[3cea4bb]73        socket_rest = og_socket_server_init(ogconfig.rest.port);
[f6f1f18]74        if (socket_rest < 0) {
75                syslog(LOG_ERR, "Cannot open REST API server socket\n");
[48de515]76                exit(EXIT_FAILURE);
[f6f1f18]77        }
[48de515]78
79        ev_io_init(&ev_io_server_rest, og_server_accept_cb, socket_rest, EV_READ);
80        ev_io_start(og_loop, &ev_io_server_rest);
81
82        socket_agent_rest = og_socket_server_init("8889");
[f6f1f18]83        if (socket_agent_rest < 0) {
84                syslog(LOG_ERR, "Cannot open ogClient server socket\n");
[48de515]85                exit(EXIT_FAILURE);
[f6f1f18]86        }
[48de515]87
88        ev_io_init(&ev_io_agent_rest, og_server_accept_cb, socket_agent_rest, EV_READ);
89        ev_io_start(og_loop, &ev_io_agent_rest);
90
[7d74d42]91        if (og_dbi_schema_update() < 0)
92                exit(EXIT_FAILURE);
93
[f6f1f18]94        if (og_dbi_schedule_get() < 0) {
95                syslog(LOG_ERR, "Cannot connect to database\n");
[48de515]96                exit(EXIT_FAILURE);
[f6f1f18]97        }
[48de515]98
99        og_schedule_next(og_loop);
100
101        syslog(LOG_INFO, "Waiting for connections\n");
102
103        while (1)
104                ev_loop(og_loop, 0);
105
106        exit(EXIT_SUCCESS);
107}
Note: See TracBrowser for help on using the repository browser.