2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "task-factory.h"
21 #include "report-generator.h"
22 #include "report-json-serializer.h"
24 #include "err-check.h"
27 static task_t *create_system_report_task(config_options_e options);
28 static task_t *create_load_avg_report_task();
29 static task_t *create_app_report_task(config_options_e options, const char *regex);
31 static void execute_scan_system_memory(task_t *task);
32 static void execute_scan_system_cpu(task_t *task);
33 static void execute_scan_load_avg(task_t *task);
34 static void execute_scan_app_memory(task_t *task);
35 static void execute_scan_apps_cpu(task_t *task);
37 static void send_report(char *report);
39 static void release_system_task(task_t *task);
40 static void release_app_task(task_t *task);
42 task_t *task_factory_create_single(const config_t *config)
47 return create_system_report_task(config->data.system.options);
49 return create_load_avg_report_task();
51 return create_app_report_task(config->data.apps.options, config->data.apps.app_id);
58 static task_t *create_system_report_task(config_options_e options)
60 system_task_t *_system_task = (system_task_t *)g_malloc(sizeof(system_task_t));
62 _system_task->task.release = release_system_task;
63 _system_task->report_generator = report_generator_new_system_report_generator();
68 _system_task->task.execute = execute_scan_system_cpu;
71 _system_task->task.execute = execute_scan_system_memory;
74 report_generator_free_system_generator(_system_task->report_generator);
79 return &_system_task->task;
82 static task_t *create_load_avg_report_task()
84 task_t *_load_avg_task = (task_t *)g_malloc(sizeof(task_t));
86 _load_avg_task->execute = execute_scan_load_avg;
87 _load_avg_task->release = NULL;
89 return _load_avg_task;
92 static task_t *create_app_report_task(config_options_e options, const char *app_id)
94 app_task_t *_app_task = (app_task_t *)g_malloc(sizeof(app_task_t));
96 _app_task->task.release = release_app_task;
97 _app_task->report_generator = report_generator_new_app_report_generator(app_id);
102 _app_task->task.execute = execute_scan_apps_cpu;
105 _app_task->task.execute = execute_scan_app_memory;
108 report_generator_free_app_generator(_app_task->report_generator);
113 return &_app_task->task;
116 static void execute_scan_system_memory(task_t *task)
118 ON_NULL_RETURN(task);
120 system_task_t *_system_task = container_of(task, system_task_t, task);
122 struct system_memory_usage_report report;
124 int ret = report_generator_generate_system_memory_usage_report(_system_task->report_generator, &report);
125 ON_TRUE_RETURN(ret != 0);
127 char *json_report = report_json_serializer_serialize_system_memory_usage_report(&report);
128 send_report(json_report);
132 static void execute_scan_system_cpu(task_t *task)
134 ON_NULL_RETURN(task);
136 system_task_t *_system_task = container_of(task, system_task_t, task);
138 struct system_cpu_usage_report report;
140 int ret = report_generator_generate_system_cpu_usage_report(_system_task->report_generator, 0, &report);
141 ON_TRUE_RETURN(ret != 0);
143 char *json_report = report_json_serializer_serialize_system_cpu_usage_report(&report);
144 send_report(json_report);
148 static void execute_scan_load_avg(task_t *task)
150 ON_NULL_RETURN(task);
152 struct system_load_average_report report;
154 int ret = report_generator_generate_load_average_report(&report);
155 ON_TRUE_RETURN(ret != 0);
157 char *json_report = report_json_serializer_serialize_system_load_average_report(&report);
158 send_report(json_report);
162 static void execute_scan_app_memory(task_t *task)
164 ON_NULL_RETURN(task);
166 app_task_t *_app_task = container_of(task, app_task_t, task);
168 struct app_memory_usage_report reports;
170 report_generator_generate_app_memory_usage_report(_app_task->report_generator, &reports);
172 char *json_report = report_json_serializer_serialize_apps_memory_usage_report(&reports);
173 send_report(json_report);
177 static void execute_scan_apps_cpu(task_t *task)
179 ON_NULL_RETURN(task);
181 app_task_t *_app_task = container_of(task, app_task_t, task);
183 struct app_cpu_usage_report reports;
185 report_generator_generate_app_cpu_usage_report(_app_task->report_generator, 0, &reports);
187 char *json_report = report_json_serializer_serialize_apps_cpu_usage_report(&reports);
188 send_report(json_report);
192 static void send_report(char *report)
194 //TODO send report here
197 static void release_system_task(task_t *task)
199 ON_NULL_RETURN(task);
201 system_task_t *_system_task = container_of(task, system_task_t, task);
203 report_generator_free_system_generator(_system_task->report_generator);
204 g_free(_system_task);
207 static void release_app_task(task_t *task)
209 ON_NULL_RETURN(task);
211 app_task_t *_app_task = container_of(task, app_task_t, task);
213 report_generator_free_app_generator(_app_task->report_generator);