config: added total_duration 32/183232/4
authorMichal Kolodziejski <m.kolodziejs@samsung.com>
Tue, 3 Jul 2018 12:39:55 +0000 (14:39 +0200)
committerMichal Kolodziejski <m.kolodziejs@samsung.com>
Fri, 6 Jul 2018 08:33:36 +0000 (10:33 +0200)
Change-Id: I73700bfbd122980aa865c80a7147954873fcbf31
Signed-off-by: Michal Kolodziejski <m.kolodziejs@samsung.com>
src/config-deserializer.c
src/config-deserializer.h
src/json-schema-defs.h
src/report-generator.c
src/report-json-serializer.c
src/scheduler.c
src/scheduler.h
src/task-factory.c
src/task-worker.c
src/task-worker.h [new file with mode: 0644]

index 18596bd..298d305 100644 (file)
 #include "config-deserializer.h"
 #include "config.h"
 #include "err-check.h"
+#include "log.h"
 
 static JsonNode *parse_string(JsonParser *parser, const char *config_json);
 static void config_array_iterate_func(JsonArray *array, guint index, JsonNode *element, gpointer user_data);
 static config_options_e config_parse_options(const char *option);
 
-config_t *deserialize_configs(const char *config_json, int *size)
+config_t *deserialize_configs(const char *config_json, int *size, int *total_duration)
 {
     JsonParser *parser = json_parser_new();
 
     JsonNode *root = parse_string(parser, config_json);
+    JsonObject *obj = json_node_get_object(root);
 
-    JsonArray *array = json_node_get_array(root);
+    int td = json_object_get_int_member(obj, SCHEMA_CONFIG_TOTAL_DURATION);
+    *total_duration = td;
+
+    JsonArray *array = json_object_get_array_member(obj, SCHEMA_CONFIG_ENTRY);
     if (!array)
     {
         ERR("Json config is invalid!");
index fb875d4..62fe4aa 100644 (file)
@@ -26,6 +26,6 @@
  * @return Dynamically allocated config_t array.
  * @note Returned array should be released with free.
  */
-config_t *deserialize_configs(const char *config_json, int *size);
+config_t *deserialize_configs(const char *config_json, int *size, int *total_duration);
 
 #endif
\ No newline at end of file
index 596ea6d..f36126b 100644 (file)
@@ -17,6 +17,9 @@
 #ifndef __JSON_SCHEMA_DEFS_H_
 #define __JSON_SCHEMA_DEFS_H_
 
+#define SCHEMA_CONFIG_TOTAL_DURATION "total_duration"
+#define SCHEMA_CONFIG_ENTRY "config_entry"
+
 #define SCHEMA_TYPE "type"
 #define SCHEMA_TYPE_TOP "TOP"
 #define SCHEMA_TYPE_SYSTEM "SYSTEM"
index a763e91..6535021 100644 (file)
@@ -116,7 +116,7 @@ report_generator_app_t *report_generator_new_app_report_generator(const char *ap
 {
        ON_NULL_RETURN_VAL(app_id, NULL);
 
-       report_generator_app_t *ret = malloc(sizeof(struct report_generator_app));
+       report_generator_app_t *ret = calloc(1, sizeof(struct report_generator_app));
        if (!ret) {
                ERR("malloc failed");
                return NULL;
@@ -291,6 +291,7 @@ int report_generator_generate_app_cpu_usage_report(
        }
 
        strncpy(report->app_id, generator->app_id, sizeof(report->app_id));
+       report->process_report.pid = generator->process_gen->pid;
 
        return 0;
 }
@@ -315,6 +316,7 @@ int report_generator_generate_app_memory_usage_report(
        }
 
        strncpy(report->app_id, generator->app_id, sizeof(report->app_id));
+       report->process_report.pid = generator->process_gen->pid;
 
        return 0;
 }
index 9a2f06c..619cbdd 100644 (file)
@@ -227,12 +227,12 @@ static void apps_cpu_usage_report_to_json_object(JsonBuilder *builder, struct ap
        json_builder_set_member_name(builder, SCHEMA_ID);
        json_builder_add_string_value(builder, report->app_id);
        json_builder_set_member_name(builder, SCHEMA_RESULT_PID);
-       json_builder_add_double_value(builder, report->process_report.pid);
+       json_builder_add_int_value(builder, report->process_report.pid);
 
        json_builder_set_member_name(builder, SCHEMA_RESULT_RESULT);
        json_builder_begin_object(builder);
        json_builder_set_member_name(builder, SCHEMA_RESULT_TIME);
-       json_builder_add_double_value(builder, report->process_report.time);
+       json_builder_add_int_value(builder, report->process_report.time);
        json_builder_set_member_name(builder, SCHEMA_RESULT_USAGE);
        json_builder_add_double_value(builder, report->process_report.usage);
 
@@ -257,12 +257,12 @@ static void apps_memory_usage_report_to_json_object(JsonBuilder *builder, struct
        json_builder_set_member_name(builder, SCHEMA_ID);
        json_builder_add_string_value(builder, report->app_id);
        json_builder_set_member_name(builder, SCHEMA_RESULT_PID);
-       json_builder_add_double_value(builder, report->process_report.pid);
+       json_builder_add_int_value(builder, report->process_report.pid);
 
        json_builder_set_member_name(builder, SCHEMA_RESULT_RESULT);
        json_builder_begin_object(builder);
        json_builder_set_member_name(builder, SCHEMA_RESULT_TIME);
-       json_builder_add_double_value(builder, report->process_report.time);
+       json_builder_add_int_value(builder, report->process_report.time);
        json_builder_set_member_name(builder, SCHEMA_RESULT_USAGE);
        json_builder_add_double_value(builder, report->process_report.usage);
 
index 507f085..1992e36 100644 (file)
@@ -20,6 +20,7 @@
 #include "task.h"
 #include "worker.h"
 #include "task-factory.h"
+#include "task-worker.h"
 
 struct scheduler
 {
@@ -38,6 +39,7 @@ struct config_item
 
 static gboolean timer_func(gpointer user_data);
 static void free_items(struct config_item *items, size_t items_size);
+static gboolean timeout_func(gpointer user_data);
 
 scheduler_t *scheduler_create()
 {
@@ -58,7 +60,7 @@ void scheduler_destroy(scheduler_t *scheduler)
     g_free(scheduler);
 }
 
-void scheduler_change_config(scheduler_t *scheduler, const config_t *task_configs, size_t items_size)
+void scheduler_change_config(scheduler_t *scheduler, const config_t *task_configs, size_t items_size, int timeout)
 {
     ON_NULL_RETURN(scheduler);
     ON_NULL_RETURN(task_configs);
@@ -76,6 +78,14 @@ void scheduler_change_config(scheduler_t *scheduler, const config_t *task_config
         scheduler->items[i].frequency = task_configs[i].frequency;
         scheduler->items[i].timer_id = g_timeout_add(scheduler->items[i].frequency, timer_func, &scheduler->items[i]);
     }
+
+    g_timeout_add(timeout, timeout_func, scheduler);
+}
+
+static gboolean timeout_func(gpointer user_data)
+{
+    cleanup_and_exit();
+    return TRUE;
 }
 
 static gboolean timer_func(gpointer user_data)
index 53ae15b..1ba6e50 100644 (file)
@@ -38,8 +38,9 @@ void scheduler_destroy(scheduler_t *scheduler);
  * @brief Changes current tasks config.
  * @param[in] task_configs Array with tasks config.
  * @param[in] config_size Size of the task_configs array.
+ * @param[in] timeout After this time scheduler will stop working.
  */
-void scheduler_change_config(scheduler_t *scheduler, const config_t *task_configs, size_t config_size);
+void scheduler_change_config(scheduler_t *scheduler, const config_t *task_configs, size_t config_size, int timeout);
 
 #endif
 
index 1ab2cc6..938a85a 100644 (file)
@@ -165,11 +165,11 @@ static void execute_scan_app_memory(task_t *task)
 
     app_task_t *_app_task = container_of(task, app_task_t, task);
 
-    struct app_memory_usage_report reports;
+    struct app_memory_usage_report report;
 
-    report_generator_generate_app_memory_usage_report(_app_task->report_generator, &reports);
+    report_generator_generate_app_memory_usage_report(_app_task->report_generator, &report);
 
-    char *json_report = report_json_serializer_serialize_apps_memory_usage_report(&reports);
+    char *json_report = report_json_serializer_serialize_apps_memory_usage_report(&report);
     send_report(json_report);
     g_free(json_report);
 }
index b36b2b9..9112f9d 100644 (file)
@@ -18,3 +18,8 @@ int main(int argc, char *argv[])
 {
        return 0;
 }
+
+void cleanup_and_exit()
+{
+       //TODO implement
+}
diff --git a/src/task-worker.h b/src/task-worker.h
new file mode 100644 (file)
index 0000000..ee5d945
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __JSON_TASK_WORKER_H_
+#define __JSON_TASK_WORKER_H_
+
+void cleanup_and_exit();
+
+#endif
\ No newline at end of file