summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichal Kolodziejski <m.kolodziejs@samsung.com>2018-07-04 15:41:46 +0200
committerMichal Kolodziejski <m.kolodziejs@samsung.com>2018-07-05 16:11:25 +0200
commit92afef53b57c8485a1ab6f81be24682626cb1886 (patch)
tree67eb8d8b3d5230aac191545a6bb9aec71d0e4ecd /src
parentfb5db28230d6e3886a5d444333819c58ae4ef167 (diff)
downloadttsd-worker-task-92afef53b57c8485a1ab6f81be24682626cb1886.tar.gz
ttsd-worker-task-92afef53b57c8485a1ab6f81be24682626cb1886.tar.bz2
ttsd-worker-task-92afef53b57c8485a1ab6f81be24682626cb1886.zip
report-json-serializer: app and top serializers
Change-Id: Iecc773aecbc6f44d404e7edd4eea13e62868683f Signed-off-by: Michal Kolodziejski <m.kolodziejs@samsung.com>
Diffstat (limited to 'src')
-rw-r--r--src/config-deserializer.c4
-rw-r--r--src/json-schema-defs.h7
-rw-r--r--src/report-json-serializer.c166
-rw-r--r--src/report-json-serializer.h45
4 files changed, 210 insertions, 12 deletions
diff --git a/src/config-deserializer.c b/src/config-deserializer.c
index aa00d1a..18596bd 100644
--- a/src/config-deserializer.c
+++ b/src/config-deserializer.c
@@ -92,14 +92,14 @@ static void config_array_iterate_func(JsonArray *array, guint index, JsonNode *e
const gchar *target = json_object_get_string_member(entry, SCHEMA_TARGET);
configs[index].data.system.options = config_parse_options(target);
}
- else if (g_strcmp0(type, SCHEMA_TYPE_APPS) == 0)
+ else if (g_strcmp0(type, SCHEMA_TYPE_PROCESS) == 0)
{
configs[index].scope = APPS;
const gchar *target = json_object_get_string_member(entry, SCHEMA_TARGET);
configs[index].data.apps.options = config_parse_options(target);
- const gchar *app_id = json_object_get_string_member(entry, SCHEMA_APP_ID);
+ const gchar *app_id = json_object_get_string_member(entry, SCHEMA_ID);
snprintf(configs[index].data.apps.app_id, APP_ID_REGEX_MAX_LEN + 1, "%s", app_id);
}
else if (g_strcmp0(type, SCHEMA_TYPE_LOAD_AVG) == 0)
diff --git a/src/json-schema-defs.h b/src/json-schema-defs.h
index 13f0248..596ea6d 100644
--- a/src/json-schema-defs.h
+++ b/src/json-schema-defs.h
@@ -21,7 +21,7 @@
#define SCHEMA_TYPE_TOP "TOP"
#define SCHEMA_TYPE_SYSTEM "SYSTEM"
#define SCHEMA_TYPE_LOAD_AVG "LOAD_AVG"
-#define SCHEMA_TYPE_APPS "APPS"
+#define SCHEMA_TYPE_PROCESS "PROCESS"
#define SCHEMA_TARGET "target"
#define SCHEMA_TARGET_CPU "CPU"
@@ -29,13 +29,14 @@
#define SCHEMA_FREQUENCY "frequency"
#define SCHEMA_TOP "top"
-#define SCHEMA_APP_ID "app_id"
+#define SCHEMA_ID "id"
#define SCHEMA_RESULT_DATA_SYSTEM "system_data"
#define SCHEMA_RESULT_DATA_LOAD_AVG "load_avg_data"
-#define SCHEMA_RESULT_DATA_APPS "apps_data"
+#define SCHEMA_RESULT_DATA_PROCESS "process_data"
#define SCHEMA_RESULT_DATA_TOP "top_data"
+#define SCHEMA_RESULT_PID "pid"
#define SCHEMA_RESULT_TIME "time"
#define SCHEMA_RESULT_USAGE "usage"
#define SCHEMA_RESULT_AVG_ONE "one_min_avg"
diff --git a/src/report-json-serializer.c b/src/report-json-serializer.c
index f6b03fc..9a2f06c 100644
--- a/src/report-json-serializer.c
+++ b/src/report-json-serializer.c
@@ -23,11 +23,11 @@ static char *_serialize(JsonBuilder *builder)
{
JsonGenerator *gen = json_generator_new();
if (!gen) {
- g_object_unref(builder); \
+ g_object_unref(builder);
return NULL;
}
- JsonNode *root = json_builder_get_root(builder); \
+ JsonNode *root = json_builder_get_root(builder);
json_generator_set_root(gen, root);
char *str = json_generator_to_data(gen, NULL);
g_object_unref(gen);
@@ -46,6 +46,18 @@ func_name(param_type *report) \
return ret; \
}
+#define IMPLEMENT_ARRAY_SERIALIZER_FUNC(func_name, param_type, serializer) \
+char* \
+func_name(param_type **reports) \
+{\
+ JsonBuilder *builder = json_builder_new(); \
+ if (!builder) return NULL; \
+ serializer(builder, reports); \
+ char *ret = _serialize(builder); \
+ g_object_unref(builder); \
+ return ret; \
+}
+
static void system_load_average_report_to_json_object(JsonBuilder *builder, struct system_load_average_report *report)
{
json_builder_begin_object(builder);
@@ -115,16 +127,148 @@ static void system_cpu_usage_report_to_json_object(JsonBuilder *builder, struct
json_builder_end_object(builder);
}
+static void top_cpu_usage_reports_to_json_object(JsonBuilder *builder, struct app_cpu_usage_report **reports)
+{
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_TYPE);
+ json_builder_add_string_value(builder, SCHEMA_TYPE_PROCESS);
+
+ json_builder_set_member_name(builder, SCHEMA_TARGET);
+ json_builder_add_string_value(builder, SCHEMA_TARGET_CPU);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_DATA_TOP);
+ json_builder_begin_array(builder);
+
+ int i = 0;
+ while(reports[i])
+ {
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_ID);
+ json_builder_add_string_value(builder, reports[i]->app_id);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_PID);
+ json_builder_add_double_value(builder, reports[i]->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, reports[i]->process_report.time);
+ json_builder_set_member_name(builder, SCHEMA_RESULT_USAGE);
+ json_builder_add_double_value(builder, reports[i]->process_report.usage);
+
+ json_builder_end_object(builder);
+
+ json_builder_end_object(builder);
+ i++;
+ }
+
+ json_builder_end_array(builder);
+ json_builder_end_object(builder);
+}
+
+static void top_memory_usage_reports_to_json_object(JsonBuilder *builder, struct app_memory_usage_report **reports)
+{
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_TYPE);
+ json_builder_add_string_value(builder, SCHEMA_TYPE_PROCESS);
+
+ json_builder_set_member_name(builder, SCHEMA_TARGET);
+ json_builder_add_string_value(builder, SCHEMA_TARGET_MEMORY);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_DATA_TOP);
+ json_builder_begin_array(builder);
+
+ int i = 0;
+ while(reports[i])
+ {
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_ID);
+ json_builder_add_string_value(builder, reports[i]->app_id);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_PID);
+ json_builder_add_double_value(builder, reports[i]->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, reports[i]->process_report.time);
+ json_builder_set_member_name(builder, SCHEMA_RESULT_USAGE);
+ json_builder_add_double_value(builder, reports[i]->process_report.usage);
+
+ json_builder_end_object(builder);
+
+ json_builder_end_object(builder);
+ i++;
+ }
+
+ json_builder_end_array(builder);
+ json_builder_end_object(builder);
+}
+
static void apps_cpu_usage_report_to_json_object(JsonBuilder *builder, struct app_cpu_usage_report *report)
{
- //TODO
- //implement after report API changes
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_TYPE);
+ json_builder_add_string_value(builder, SCHEMA_TYPE_PROCESS);
+
+ json_builder_set_member_name(builder, SCHEMA_TARGET);
+ json_builder_add_string_value(builder, SCHEMA_TARGET_CPU);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_DATA_PROCESS);
+ json_builder_begin_object(builder);
+
+ 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_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_set_member_name(builder, SCHEMA_RESULT_USAGE);
+ json_builder_add_double_value(builder, report->process_report.usage);
+
+ json_builder_end_object(builder);
+ json_builder_end_object(builder);
+ json_builder_end_object(builder);
}
static void apps_memory_usage_report_to_json_object(JsonBuilder *builder, struct app_memory_usage_report *report)
{
- //TODO
- //implement after report API changes
+ json_builder_begin_object(builder);
+
+ json_builder_set_member_name(builder, SCHEMA_TYPE);
+ json_builder_add_string_value(builder, SCHEMA_TYPE_PROCESS);
+
+ json_builder_set_member_name(builder, SCHEMA_TARGET);
+ json_builder_add_string_value(builder, SCHEMA_TARGET_MEMORY);
+
+ json_builder_set_member_name(builder, SCHEMA_RESULT_DATA_PROCESS);
+ json_builder_begin_object(builder);
+
+ 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_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_set_member_name(builder, SCHEMA_RESULT_USAGE);
+ json_builder_add_double_value(builder, report->process_report.usage);
+
+ json_builder_end_object(builder);
+ json_builder_end_object(builder);
+ json_builder_end_object(builder);
}
IMPLEMENT_SERIALIZER_FUNC(
@@ -152,3 +296,13 @@ IMPLEMENT_SERIALIZER_FUNC(
struct app_memory_usage_report,
apps_memory_usage_report_to_json_object)
+IMPLEMENT_ARRAY_SERIALIZER_FUNC(
+ report_json_serializer_serialize_top_cpu_usage_reports,
+ struct app_cpu_usage_report,
+ top_cpu_usage_reports_to_json_object)
+
+IMPLEMENT_ARRAY_SERIALIZER_FUNC(
+ report_json_serializer_serialize_top_memory_usage_reports,
+ struct app_memory_usage_report,
+ top_memory_usage_reports_to_json_object)
+
diff --git a/src/report-json-serializer.h b/src/report-json-serializer.h
index 6b0f926..f335b37 100644
--- a/src/report-json-serializer.h
+++ b/src/report-json-serializer.h
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-
#ifndef __REPORT_JSON_SERIALIZER_H_
#define __REPORT_JSON_SERIALIZER_H_
@@ -22,6 +21,9 @@
/**
* @brief Serializes system_load_average_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -29,6 +31,9 @@ char *report_json_serializer_serialize_system_load_average_report(struct system_
/**
* @brief Serializes system_memory_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -36,6 +41,9 @@ char *report_json_serializer_serialize_system_memory_usage_report(struct system_
/**
* @brief Serializes system_cpus_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -43,6 +51,9 @@ char *report_json_serializer_serialize_system_cpu_usage_report(struct system_cpu
/**
* @brief Serializes system_cpus_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -50,6 +61,9 @@ char *report_json_serializer_serialize_system_cpus_usage_report(struct system_pe
/**
* @brief Serializes process_memory_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -57,6 +71,9 @@ char *report_json_serializer_serialize_process_cpu_usage_report(struct process_c
/**
* @brief Serializes process_memory_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -64,6 +81,9 @@ char *report_json_serializer_serialize_process_memory_usage_report(struct proces
/**
* @brief Serializes app_system_cpu_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
@@ -71,9 +91,32 @@ char *report_json_serializer_serialize_apps_cpu_usage_report(struct app_cpu_usag
/**
* @brief Serializes app_memory_usage_report to json string
+ *
+ * @param[in] report Report structure with usage data.
+ *
* @return dynamically allocated string on NULL on error.
* @remark returned value should be released with @free
*/
char *report_json_serializer_serialize_apps_memory_usage_report(struct app_memory_usage_report *report);
+/**
+ * @brief Serializes app_system_cpu_usage_reports to json string
+ *
+ * @param[in] report NULL-terminated array of report structures with usage data.
+ *
+ * @return dynamically allocated string on NULL on error.
+ * @remark returned value should be released with @free
+ */
+char *report_json_serializer_serialize_top_cpu_usage_reports(struct app_cpu_usage_report **reports);
+
+/**
+ * @brief Serializes app_memory_usage_reports to json string
+ *
+ * @param[in] report NULL-terminated array of report structures with usage data.
+ *
+ * @return dynamically allocated string on NULL on error.
+ * @remark returned value should be released with @free
+ */
+char *report_json_serializer_serialize_top_memory_usage_reports(struct app_memory_usage_report **reports);
+
#endif