mirror of https://git.48k.eu/ogserver
#942 Add REST API /schedule get function
parent
83b242ce58
commit
d1fc76c6b4
|
@ -4908,6 +4908,111 @@ static int og_dbi_schedule_delete(struct og_dbi *dbi, uint32_t id)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct og_db_schedule {
|
||||||
|
uint32_t id;
|
||||||
|
uint32_t task_id;
|
||||||
|
const char *name;
|
||||||
|
struct og_schedule_time time;
|
||||||
|
uint32_t week_days;
|
||||||
|
uint32_t weeks;
|
||||||
|
uint32_t suspended;
|
||||||
|
uint32_t session;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int og_dbi_schedule_get_json(struct og_dbi *dbi, json_t *root,
|
||||||
|
const char *task_id, const char *schedule_id)
|
||||||
|
{
|
||||||
|
struct og_db_schedule schedule;
|
||||||
|
json_t *obj, *array;
|
||||||
|
const char *msglog;
|
||||||
|
dbi_result result;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
if (task_id) {
|
||||||
|
result = dbi_conn_queryf(dbi->conn,
|
||||||
|
"SELECT idprogramacion,"
|
||||||
|
" identificador, nombrebloque,"
|
||||||
|
" annos, meses, diario, dias,"
|
||||||
|
" semanas, horas, ampm,"
|
||||||
|
" minutos,suspendida, sesion "
|
||||||
|
"FROM programaciones "
|
||||||
|
"WHERE identificador=%d",
|
||||||
|
atoi(task_id));
|
||||||
|
} else if (schedule_id) {
|
||||||
|
result = dbi_conn_queryf(dbi->conn,
|
||||||
|
"SELECT idprogramacion,"
|
||||||
|
" identificador, nombrebloque,"
|
||||||
|
" annos, meses, diario, dias,"
|
||||||
|
" semanas, horas, ampm,"
|
||||||
|
" minutos,suspendida, sesion "
|
||||||
|
"FROM programaciones "
|
||||||
|
"WHERE idprogramacion=%d",
|
||||||
|
atoi(schedule_id));
|
||||||
|
} else {
|
||||||
|
result = dbi_conn_queryf(dbi->conn,
|
||||||
|
"SELECT idprogramacion,"
|
||||||
|
" identificador, nombrebloque,"
|
||||||
|
" annos, meses, diario, dias,"
|
||||||
|
" semanas, horas, ampm,"
|
||||||
|
" minutos,suspendida, sesion "
|
||||||
|
"FROM programaciones");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
dbi_conn_error(dbi->conn, &msglog);
|
||||||
|
syslog(LOG_ERR, "failed to query database (%s:%d) %s\n",
|
||||||
|
__func__, __LINE__, msglog);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
array = json_array();
|
||||||
|
if (!array)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
while (dbi_result_next_row(result)) {
|
||||||
|
schedule.id = dbi_result_get_uint(result, "idprogramacion");
|
||||||
|
schedule.task_id = dbi_result_get_uint(result, "identificador");
|
||||||
|
schedule.name = dbi_result_get_string(result, "nombrebloque");
|
||||||
|
schedule.time.years = dbi_result_get_uint(result, "annos");
|
||||||
|
schedule.time.months = dbi_result_get_uint(result, "meses");
|
||||||
|
schedule.time.days = dbi_result_get_uint(result, "diario");
|
||||||
|
schedule.time.hours = dbi_result_get_uint(result, "horas");
|
||||||
|
schedule.time.am_pm = dbi_result_get_uint(result, "ampm");
|
||||||
|
schedule.time.minutes = dbi_result_get_uint(result, "minutos");
|
||||||
|
schedule.week_days = dbi_result_get_uint(result, "dias");
|
||||||
|
schedule.weeks = dbi_result_get_uint(result, "semanas");
|
||||||
|
schedule.suspended = dbi_result_get_uint(result, "suspendida");
|
||||||
|
schedule.session = dbi_result_get_uint(result, "sesion");
|
||||||
|
|
||||||
|
obj = json_object();
|
||||||
|
if (!obj) {
|
||||||
|
err = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
json_object_set_new(obj, "id", json_integer(schedule.id));
|
||||||
|
json_object_set_new(obj, "task", json_integer(schedule.task_id));
|
||||||
|
json_object_set_new(obj, "name", json_string(schedule.name));
|
||||||
|
json_object_set_new(obj, "years", json_integer(schedule.time.years));
|
||||||
|
json_object_set_new(obj, "months", json_integer(schedule.time.months));
|
||||||
|
json_object_set_new(obj, "days", json_integer(schedule.time.days));
|
||||||
|
json_object_set_new(obj, "hours", json_integer(schedule.time.hours));
|
||||||
|
json_object_set_new(obj, "am_pm", json_integer(schedule.time.am_pm));
|
||||||
|
json_object_set_new(obj, "minutes", json_integer(schedule.time.minutes));
|
||||||
|
json_object_set_new(obj, "week_days", json_integer(schedule.week_days));
|
||||||
|
json_object_set_new(obj, "weeks", json_integer(schedule.weeks));
|
||||||
|
json_object_set_new(obj, "suspended", json_integer(schedule.suspended));
|
||||||
|
json_object_set_new(obj, "session", json_integer(schedule.session));
|
||||||
|
|
||||||
|
json_array_append_new(array, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
json_object_set_new(root, "schedule", array);
|
||||||
|
|
||||||
|
dbi_result_free(result);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static struct ev_loop *og_loop;
|
static struct ev_loop *og_loop;
|
||||||
|
|
||||||
static int og_cmd_schedule_create(json_t *element, struct og_msg_params *params)
|
static int og_cmd_schedule_create(json_t *element, struct og_msg_params *params)
|
||||||
|
@ -4928,7 +5033,7 @@ static int og_cmd_schedule_create(json_t *element, struct og_msg_params *params)
|
||||||
} else if (!strcmp(key, "name")) {
|
} else if (!strcmp(key, "name")) {
|
||||||
err = og_json_parse_string(value, ¶ms->name);
|
err = og_json_parse_string(value, ¶ms->name);
|
||||||
params->flags |= OG_REST_PARAM_NAME;
|
params->flags |= OG_REST_PARAM_NAME;
|
||||||
} else if (!strcmp(key, "time_params"))
|
} else if (!strcmp(key, "when"))
|
||||||
err = og_json_parse_time_params(value, params);
|
err = og_json_parse_time_params(value, params);
|
||||||
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
@ -4984,7 +5089,7 @@ static int og_cmd_schedule_update(json_t *element, struct og_msg_params *params)
|
||||||
} else if (!strcmp(key, "name")) {
|
} else if (!strcmp(key, "name")) {
|
||||||
err = og_json_parse_string(value, ¶ms->name);
|
err = og_json_parse_string(value, ¶ms->name);
|
||||||
params->flags |= OG_REST_PARAM_NAME;
|
params->flags |= OG_REST_PARAM_NAME;
|
||||||
} else if (!strcmp(key, "time_params"))
|
} else if (!strcmp(key, "when"))
|
||||||
err = og_json_parse_time_params(value, params);
|
err = og_json_parse_time_params(value, params);
|
||||||
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
@ -5062,6 +5167,62 @@ static int og_cmd_schedule_delete(json_t *element, struct og_msg_params *params)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int og_cmd_schedule_get(json_t *element, struct og_msg_params *params,
|
||||||
|
char *buffer_reply)
|
||||||
|
{
|
||||||
|
struct og_buffer og_buffer = {
|
||||||
|
.data = buffer_reply,
|
||||||
|
};
|
||||||
|
json_t *schedule_root;
|
||||||
|
struct og_dbi *dbi;
|
||||||
|
const char *key;
|
||||||
|
json_t *value;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (element) {
|
||||||
|
if (json_typeof(element) != JSON_OBJECT)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
json_object_foreach(element, key, value) {
|
||||||
|
if (!strcmp(key, "task")) {
|
||||||
|
err = og_json_parse_string(value,
|
||||||
|
¶ms->task_id);
|
||||||
|
} else if (!strcmp(key, "id")) {
|
||||||
|
err = og_json_parse_string(value, ¶ms->id);
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dbi = og_dbi_open(&dbi_config);
|
||||||
|
if (!dbi) {
|
||||||
|
syslog(LOG_ERR, "cannot open connection database (%s:%d)\n",
|
||||||
|
__func__, __LINE__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
schedule_root = json_object();
|
||||||
|
if (!schedule_root) {
|
||||||
|
og_dbi_close(dbi);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = og_dbi_schedule_get_json(dbi, schedule_root,
|
||||||
|
params->task_id, params->id);
|
||||||
|
og_dbi_close(dbi);
|
||||||
|
|
||||||
|
if (err >= 0)
|
||||||
|
json_dump_callback(schedule_root, og_json_dump_clients, &og_buffer, 0);
|
||||||
|
|
||||||
|
json_decref(schedule_root);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static int og_client_method_not_found(struct og_client *cli)
|
static int og_client_method_not_found(struct og_client *cli)
|
||||||
{
|
{
|
||||||
/* To meet RFC 7231, this function MUST generate an Allow header field
|
/* To meet RFC 7231, this function MUST generate an Allow header field
|
||||||
|
@ -5405,6 +5566,12 @@ static int og_client_state_process_payload_rest(struct og_client *cli)
|
||||||
return og_client_bad_request(cli);
|
return og_client_bad_request(cli);
|
||||||
}
|
}
|
||||||
err = og_cmd_schedule_update(root, ¶ms);
|
err = og_cmd_schedule_update(root, ¶ms);
|
||||||
|
} else if (!strncmp(cmd, "schedule/get",
|
||||||
|
strlen("schedule/get"))) {
|
||||||
|
if (method != OG_METHOD_POST)
|
||||||
|
return og_client_method_not_found(cli);
|
||||||
|
|
||||||
|
err = og_cmd_schedule_get(root, ¶ms, buf_reply);
|
||||||
} else {
|
} else {
|
||||||
syslog(LOG_ERR, "unknown command: %.32s ...\n", cmd);
|
syslog(LOG_ERR, "unknown command: %.32s ...\n", cmd);
|
||||||
err = og_client_not_found(cli);
|
err = og_client_not_found(cli);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"task":"1","name":"test",","time_params":{"years":1024,"months":1,"days":536870912,"hours":2048,"am_pm":0,"minutes":0}}
|
{"task":"1","name":"test",","when":{"years":1024,"months":1,"days":536870912,"hours":2048,"am_pm":0,"minutes":0}}
|
||||||
|
|
Loading…
Reference in New Issue