1 /*
2 * Copyright (c) 2025 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 #include "trace_strategy_factory.h"
16
17 #include "hiview_logger.h"
18 #include "trace_utils.h"
19
20 namespace OHOS::HiviewDFX {
21 namespace {
22 DEFINE_LOG_TAG("UCollectUtil-TraceCollector");
23 }
24
25 namespace CleanThreshold {
26 const uint32_t XPERF = 3;
27 const uint32_t RELIABILITY = 3;
28 const uint32_t OTHER = 5;
29 const uint32_t SCREEN = 1;
30 const uint32_t BETACLUB = 2;
31 const uint32_t ZIP_FILE = 20;
32 const uint32_t TELE_ZIP_FILE = 20;
33 const uint32_t APP_FILE = 40;
34 }
35
CreateTraceStrategy(UCollect::TraceCaller caller,uint32_t maxDuration,uint64_t happenTime)36 auto TraceStrategyFactory::CreateTraceStrategy(UCollect::TraceCaller caller, uint32_t maxDuration, uint64_t happenTime)
37 ->std::shared_ptr<TraceStrategy>
38 {
39 StrategyParam strategyParam {maxDuration, happenTime, EnumToString(caller)};
40 switch (caller) {
41 case UCollect::TraceCaller::XPERF:
42 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
43 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::XPERF),
44 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
45 case UCollect::TraceCaller::RELIABILITY:
46 return std::make_shared<TraceAsyncStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
47 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
48 CleanThreshold::RELIABILITY),
49 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
50 case UCollect::TraceCaller::XPOWER:
51 case UCollect::TraceCaller::HIVIEW:
52 return std::make_shared<TraceFlowControlStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
53 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
54 case UCollect::TraceCaller::OTHER:
55 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
56 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::OTHER),
57 nullptr);
58 case UCollect::TraceCaller::SCREEN:
59 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
60 std::make_shared<TraceSyncCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
61 CleanThreshold::SCREEN), nullptr);
62 default:
63 return nullptr;
64 }
65 }
66
CreateTraceStrategy(UCollect::TraceClient client,uint32_t maxDuration,uint64_t happenTime)67 auto TraceStrategyFactory::CreateTraceStrategy(UCollect::TraceClient client, uint32_t maxDuration, uint64_t happenTime)
68 ->std::shared_ptr<TraceStrategy>
69 {
70 StrategyParam strategyParam {maxDuration, happenTime, ClientToString(client)};
71 switch (client) {
72 case UCollect::TraceClient::COMMAND:
73 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMAND, nullptr, nullptr);
74 case UCollect::TraceClient::COMMON_DEV:
75 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
76 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::OTHER),
77 nullptr);
78 case UCollect::TraceClient::BETACLUB:
79 return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
80 std::make_shared<TraceSyncCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
81 CleanThreshold::BETACLUB), nullptr);
82 default:
83 return nullptr;
84 }
85 }
86
CreateStrategy(UCollect::TeleModule module,uint32_t maxDuration,uint64_t happenTime)87 auto TraceStrategyFactory::CreateStrategy(UCollect::TeleModule module, uint32_t maxDuration, uint64_t happenTime)
88 ->std::shared_ptr<TelemetryStrategy>
89 {
90 return std::make_shared<TelemetryStrategy>(StrategyParam {maxDuration, happenTime, ModuleToString(module)},
91 std::make_shared<TraceZipHandler>(UNIFIED_TELEMETRY_PATH, BusinessName::TELEMETRY,
92 CleanThreshold::TELE_ZIP_FILE));
93 }
94
CreateAppStrategy(std::shared_ptr<AppCallerEvent> appCallerEvent)95 auto TraceStrategyFactory::CreateAppStrategy(std::shared_ptr<AppCallerEvent> appCallerEvent)
96 ->std::shared_ptr<TraceAppStrategy>
97 {
98 return std::make_shared<TraceAppStrategy>(appCallerEvent,
99 std::make_shared<TraceAppHandler>(UNIFIED_SHARE_PATH, CleanThreshold::APP_FILE));
100 }
101 }
102