1/*
2 * Copyright (c) 2024 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 "cooperate_hisysevent.h"
17
18#include "fi_log.h"
19
20#undef LOG_TAG
21#define LOG_TAG "CooperateHiSysEvent"
22
23namespace OHOS {
24namespace Msdp {
25namespace DeviceStatus {
26
27std::map<CooperateState, std::string> CooperateDFX::CooperateState_ = {
28    { CooperateState::COOPERATE_STATE_FREE, "STATE_FREE" },
29    { CooperateState::COOPERATE_STATE_IN, "STATE_IN" },
30    { CooperateState::COOPERATE_STATE_OUT, "STATE_OUT" },
31};
32
33std::map<CooperateType, std::pair<std::string, std::string>> CooperateDFX::serialStr_ = {
34    { CooperateType::ENABLE_SUCC, { "ENABLE_SUCCESS", "Enable cooperate successfully" } },
35    { CooperateType::ENABLE_FAIL, { "ENABLE_FAILED", "Enable cooperate failed" } },
36    { CooperateType::DISABLE_SUCC, { "DISABLE_SUCCESS", "Disenable cooperate successfully" } },
37    { CooperateType::DISABLE_FAIL, { "DISABLE_FAILED", "Disenable cooperate failed" } },
38    { CooperateType::LOCAL_ACTIVATE_SUCC, { "LOCAL_ACTIVATE_SUCCESS", "Local start cooperate successfully" } },
39    { CooperateType::LOCAL_ACTIVATE_FAIL, { "LOCAL_ACTIVATEE_FAILED", "Local start cooperate failed" } },
40    { CooperateType::REMOTE_ACTIVATE_SUCC, { "REMOTE_ACTIVATE_SUCCESS", "Remote start cooperate successfully" } },
41    { CooperateType::REMOTE_ACTIVATE_FAIL, { "REMOTE_ACTIVATE_FAILED", "Remote start cooperate failed" } },
42    { CooperateType::LOCAL_DEACTIVATE_SUCC, { "LOCAL_DEACTIVATE_SUCCESS", "Local stop cooperate successfully" } },
43    { CooperateType::LOCAL_DEACTIVATE_FAIL, { "LOCAL_DEACTIVATE_FAILED", "Local stop cooperate failed" } },
44    { CooperateType::REMOTE_DEACTIVATE_SUCC, { "REMOTE_DEACTIVATE_SUCCESS", "Remote stop cooperate successfully" } },
45    { CooperateType::REMOTE_DEACTIVATE_FAIL, { "REMOTE_DEACTIVATE_FAILED", "Remote stop cooperate failed" } },
46    { CooperateType::OPENSESSION_SUCC, { "OPENSESSION_SUCCESS", "Open session successfully" } },
47    { CooperateType::OPENSESSION_FAIL, { "OPENSESSION_FAILED", "Open session failed" } },
48    { CooperateType::UPDATESTATE_SUCC, { "UPDATESTATE_SUCCESS", "Update cooperatestate successfully" } },
49    { CooperateType::START_SUCC, { "START_SUCCESS", "Start client successfully" } },
50    { CooperateType::START_FAIL, { "START_FAILED", "Start client failed" } },
51    { CooperateType::STOP_SUCC, { "STOP_SUCCESS", "Stop client successfully" } },
52    { CooperateType::STOP_FAIL, { "STOP_FAILED", "Stop client failed" } },
53};
54
55
56template<typename... Types>
57int32_t CooperateDFX::WriteInputFunc(const CooperateType &cooperateType,
58    OHOS::HiviewDFX::HiSysEvent::EventType eventType, Types... paras)
59{
60    if (serialStr_.find(cooperateType) == serialStr_.end()) {
61        FI_HILOGE("serialStr_ can't find the cooperate hisysevent type");
62        return RET_ERR;
63    }
64    auto &[label, dec] = serialStr_[cooperateType];
65    int32_t ret = HiSysEventWrite(
66        OHOS::HiviewDFX::HiSysEvent::Domain::MSDP,
67        label,
68        eventType,
69        paras...,
70        "MSG",
71        dec);
72    if (ret != RET_OK) {
73        FI_HILOGE("HiviewDFX write failed, ret:%{public}d", ret);
74    }
75    return ret;
76}
77
78int32_t CooperateDFX::WriteEnable(OHOS::HiviewDFX::HiSysEvent::EventType type)
79{
80    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
81        return WriteInputFunc(CooperateType::ENABLE_SUCC, type);
82    }
83    return WriteInputFunc(CooperateType::ENABLE_FAIL, type);
84}
85
86int32_t CooperateDFX::WriteDisable(OHOS::HiviewDFX::HiSysEvent::EventType type)
87{
88    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
89        return WriteInputFunc(CooperateType::DISABLE_SUCC, type);
90    }
91    return WriteInputFunc(CooperateType::DISABLE_FAIL, type);
92}
93
94int32_t CooperateDFX::WriteLocalStart(OHOS::HiviewDFX::HiSysEvent::EventType type)
95{
96    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
97        return WriteInputFunc(CooperateType::LOCAL_ACTIVATE_SUCC, type);
98    }
99    return WriteInputFunc(CooperateType::LOCAL_ACTIVATE_FAIL, type);
100}
101
102int32_t CooperateDFX::WriteRemoteStart(OHOS::HiviewDFX::HiSysEvent::EventType type)
103{
104    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
105        return WriteInputFunc(CooperateType::REMOTE_ACTIVATE_SUCC, type);
106    }
107    return WriteInputFunc(CooperateType::REMOTE_ACTIVATE_FAIL, type);
108}
109
110int32_t CooperateDFX::WriteLocalStop(OHOS::HiviewDFX::HiSysEvent::EventType type)
111{
112    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
113        return WriteInputFunc(CooperateType::LOCAL_DEACTIVATE_SUCC, type);
114    }
115    return WriteInputFunc(CooperateType::LOCAL_DEACTIVATE_FAIL, type);
116}
117
118int32_t CooperateDFX::WriteRemoteStop(OHOS::HiviewDFX::HiSysEvent::EventType type)
119{
120    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
121        return WriteInputFunc(CooperateType::REMOTE_DEACTIVATE_SUCC, type);
122    }
123    return WriteInputFunc(CooperateType::REMOTE_DEACTIVATE_FAIL, type);
124}
125
126int32_t CooperateDFX::WriteOpenSession(OHOS::HiviewDFX::HiSysEvent::EventType type)
127{
128    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
129        return WriteInputFunc(CooperateType::OPENSESSION_SUCC, type);
130    }
131    return WriteInputFunc(CooperateType::OPENSESSION_FAIL, type);
132}
133
134int32_t CooperateDFX::WriteStart(OHOS::HiviewDFX::HiSysEvent::EventType type)
135{
136    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
137        return WriteInputFunc(CooperateType::START_SUCC, type);
138    }
139    return WriteInputFunc(CooperateType::START_FAIL, type);
140}
141
142int32_t CooperateDFX::WriteStop(OHOS::HiviewDFX::HiSysEvent::EventType type)
143{
144    if (type == OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR) {
145        return WriteInputFunc(CooperateType::STOP_SUCC, type);
146    }
147    return WriteInputFunc(CooperateType::STOP_FAIL, type);
148}
149
150int32_t CooperateDFX::WriteCooperateState(CooperateState curState)
151{
152    if (curState == CooperateState::N_COOPERATE_STATES) {
153        return RET_ERR;
154    }
155    if (CooperateState_.find(curState) == CooperateState_.end()) {
156        FI_HILOGE("CooperateState_ can't find the current cooperate state");
157        return RET_ERR;
158    }
159    auto type = OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR;
160    std::string currentState = CooperateState_[curState];
161    return WriteInputFunc(CooperateType::UPDATESTATE_SUCC, type, "CurrentState", currentState);
162}
163} // namespace DeviceStatus
164} // namespace Msdp
165} // namespace OHOS
166