1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "sys_event.h"
17
18#include "init_module_engine.h"
19#include "hisysevent_c.h"
20#include "plugin_adapter.h"
21
22#define STARTUP_DOMAIN "INIT"
23
24#define KEY_TOTAL_TIME  "TOTAL_TIME"
25#define KEY_DETAILED_TIME "DETAILED_TIME"
26#define KEY_REASON "REASON"
27#define KEY_FIRST "ISFIRST"
28
29static void ReportStartupTimeEvent(const StartupTimeEvent *startupTime)
30{
31    HiSysEventParam params[] = {
32        {
33            .name = KEY_TOTAL_TIME,
34            .t = HISYSEVENT_INT64,
35            .v = { .i64 = startupTime->totalTime },
36            .arraySize = 0,
37        },
38        {
39            .name = KEY_DETAILED_TIME,
40            .t = HISYSEVENT_STRING,
41            .v = { .s = startupTime->detailTime },
42            .arraySize = 0,
43        },
44        {
45            .name = KEY_REASON,
46            .t = HISYSEVENT_STRING,
47            .v = { .s = startupTime->reason },
48            .arraySize = 0,
49        },
50        {
51            .name = KEY_FIRST,
52            .t = HISYSEVENT_INT32,
53            .v = { .i32 = startupTime->firstStart },
54            .arraySize = 0,
55        }
56    };
57    int ret = OH_HiSysEvent_Write(STARTUP_DOMAIN, "STARTUP_TIME",
58        HISYSEVENT_BEHAVIOR, params, sizeof(params) / sizeof(params[0]));
59    PLUGIN_ONLY_LOG(ret == 0, "Failed to write event ret %d", ret);
60}
61
62void ReportSysEvent(const StartupEvent *event)
63{
64    PLUGIN_CHECK(event != NULL, return, "Invalid events");
65    if (event->type == STARTUP_TIME) {
66        StartupTimeEvent *startupTime = (StartupTimeEvent *)(event);
67        ReportStartupTimeEvent(startupTime);
68    }
69}
70