mirror of
https://gitee.com/openharmony/print_print_fwk
synced 2024-12-03 15:20:49 +00:00
添加大数据打点能力
Signed-off-by: wangfeifan <wangfeifan2@huawei.com>
This commit is contained in:
parent
d7c0e99786
commit
0aadd86afe
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.idea
|
||||||
|
.vscode/
|
@ -25,6 +25,7 @@ config("print_service_config") {
|
|||||||
|
|
||||||
ohos_shared_library("print_service") {
|
ohos_shared_library("print_service") {
|
||||||
sources = [
|
sources = [
|
||||||
|
"src/hisys_event_util.cpp",
|
||||||
"src/print_bms_death_recipient.cpp",
|
"src/print_bms_death_recipient.cpp",
|
||||||
"src/print_bms_helper.cpp",
|
"src/print_bms_helper.cpp",
|
||||||
"src/print_callback_proxy.cpp",
|
"src/print_callback_proxy.cpp",
|
||||||
|
38
services/include/hisys_event_util.h
Normal file
38
services/include/hisys_event_util.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HISYS_EVENT_UTIL_H
|
||||||
|
#define HISYS_EVENT_UTIL_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace OHOS::Print {
|
||||||
|
class HisysEventUtil {
|
||||||
|
public:
|
||||||
|
static void reportPrintSuccess(const std::string &msg);
|
||||||
|
|
||||||
|
static void faultPrint(std::string scene, std::string msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static constexpr char HW_PRINT_SPOOLER[] = "HW_PRINT_SPOOLER";
|
||||||
|
static const int PRINT_SUCCESS = 1003;
|
||||||
|
static const int FAULT_PRINT = 3002;
|
||||||
|
|
||||||
|
static void reportBehaviorEvent(std::string name, int behaviorCode, const std::string &msg);
|
||||||
|
|
||||||
|
static void reportFaultEvent(std::string name, int faultCode, std::string scene, std::string msg);
|
||||||
|
};
|
||||||
|
} // namespace OHOS::Print
|
||||||
|
#endif // HISYS_EVENT_UTIL_H
|
@ -96,6 +96,9 @@ private:
|
|||||||
void DestroyExtension(const std::string &printerId);
|
void DestroyExtension(const std::string &printerId);
|
||||||
void NotifyAppJobQueueChanged(const std::string &applyResult);
|
void NotifyAppJobQueueChanged(const std::string &applyResult);
|
||||||
std::shared_ptr<PrinterInfo> getPrinterInfo(const std::string printerId);
|
std::shared_ptr<PrinterInfo> getPrinterInfo(const std::string printerId);
|
||||||
|
bool isEprint(const std::string &printerId);
|
||||||
|
void ReportHisysEvent(const std::shared_ptr<PrintJob> &jobInfo, const std::string &printerId, uint32_t subState);
|
||||||
|
void ReportCompletedPrint(const std::string & printerId);
|
||||||
|
|
||||||
#ifndef TDD_ENABLE
|
#ifndef TDD_ENABLE
|
||||||
private:
|
private:
|
||||||
@ -105,6 +108,8 @@ private:
|
|||||||
static std::mutex instanceLock_;
|
static std::mutex instanceLock_;
|
||||||
static sptr<PrintServiceAbility> instance_;
|
static sptr<PrintServiceAbility> instance_;
|
||||||
static std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
static std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
||||||
|
static std::chrono::time_point<std::chrono::high_resolution_clock> startPrintTime_;
|
||||||
|
static std::string ingressPackage;
|
||||||
|
|
||||||
std::recursive_mutex apiMutex_;
|
std::recursive_mutex apiMutex_;
|
||||||
std::map<std::string, sptr<IPrintCallback>> registeredListeners_;
|
std::map<std::string, sptr<IPrintCallback>> registeredListeners_;
|
||||||
|
57
services/src/hisys_event_util.cpp
Normal file
57
services/src/hisys_event_util.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hisysevent.h"
|
||||||
|
#include "print_log.h"
|
||||||
|
#include "hisys_event_util.h"
|
||||||
|
|
||||||
|
namespace OHOS::Print {
|
||||||
|
using namespace OHOS::HiviewDFX;
|
||||||
|
|
||||||
|
void HisysEventUtil::reportBehaviorEvent(std::string name, int behaviorCode, const std::string &msg)
|
||||||
|
{
|
||||||
|
HiSysEventWrite(
|
||||||
|
HW_PRINT_SPOOLER,
|
||||||
|
name,
|
||||||
|
HiSysEvent::EventType::BEHAVIOR,
|
||||||
|
"PACKAGE_NAME", "com.huawei.hmos.hwprintspooler",
|
||||||
|
"PROCESS_NAME", "hwPrintSpooler",
|
||||||
|
"BEHAVIOR_CODE", behaviorCode,
|
||||||
|
"MSG", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HisysEventUtil::reportFaultEvent(std::string name, int faultCode, std::string scene, std::string msg)
|
||||||
|
{
|
||||||
|
HiSysEventWrite(
|
||||||
|
HW_PRINT_SPOOLER,
|
||||||
|
name,
|
||||||
|
HiSysEvent::EventType::FAULT,
|
||||||
|
"PACKAGE_NAME", "com.huawei.hmos.hwprintspooler",
|
||||||
|
"PROCESS_NAME", "hwPrintSpooler",
|
||||||
|
"FAULT_CODE", faultCode,
|
||||||
|
"SCENE", scene,
|
||||||
|
"MSG", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HisysEventUtil::reportPrintSuccess(const std::string &msg)
|
||||||
|
{
|
||||||
|
reportBehaviorEvent("PRINT_SUCCESS", PRINT_SUCCESS, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HisysEventUtil::faultPrint(std::string scene, std::string msg)
|
||||||
|
{
|
||||||
|
reportFaultEvent("PRINT_EXCEPTION", FAULT_PRINT, scene, msg);
|
||||||
|
}
|
||||||
|
}
|
@ -40,11 +40,14 @@
|
|||||||
#include "common_event_manager.h"
|
#include "common_event_manager.h"
|
||||||
#include "common_event_support.h"
|
#include "common_event_support.h"
|
||||||
#include "print_security_guard_manager.h"
|
#include "print_security_guard_manager.h"
|
||||||
|
#include "hisys_event_util.h"
|
||||||
|
#include "nlohmann/json.hpp"
|
||||||
|
|
||||||
namespace OHOS::Print {
|
namespace OHOS::Print {
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace OHOS::HiviewDFX;
|
using namespace OHOS::HiviewDFX;
|
||||||
using namespace Security::AccessToken;
|
using namespace Security::AccessToken;
|
||||||
|
using json = nlohmann::json;
|
||||||
|
|
||||||
const uint32_t MAX_RETRY_TIMES = 10;
|
const uint32_t MAX_RETRY_TIMES = 10;
|
||||||
const uint32_t START_ABILITY_INTERVAL = 6;
|
const uint32_t START_ABILITY_INTERVAL = 6;
|
||||||
@ -81,6 +84,8 @@ REGISTER_SYSTEM_ABILITY_BY_ID(PrintServiceAbility, PRINT_SERVICE_ID, true);
|
|||||||
std::mutex PrintServiceAbility::instanceLock_;
|
std::mutex PrintServiceAbility::instanceLock_;
|
||||||
sptr<PrintServiceAbility> PrintServiceAbility::instance_;
|
sptr<PrintServiceAbility> PrintServiceAbility::instance_;
|
||||||
std::shared_ptr<AppExecFwk::EventHandler> PrintServiceAbility::serviceHandler_;
|
std::shared_ptr<AppExecFwk::EventHandler> PrintServiceAbility::serviceHandler_;
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> PrintServiceAbility::startPrintTime_;
|
||||||
|
std::string PrintServiceAbility::ingressPackage;
|
||||||
|
|
||||||
PrintServiceAbility::PrintServiceAbility(int32_t systemAbilityId, bool runOnCreate)
|
PrintServiceAbility::PrintServiceAbility(int32_t systemAbilityId, bool runOnCreate)
|
||||||
: SystemAbility(systemAbilityId, runOnCreate), state_(ServiceRunningState::STATE_NOT_START),
|
: SystemAbility(systemAbilityId, runOnCreate), state_(ServiceRunningState::STATE_NOT_START),
|
||||||
@ -227,6 +232,7 @@ int32_t PrintServiceAbility::StartPrint(const std::vector<std::string> &fileList
|
|||||||
BuildFDParam(fdList, want);
|
BuildFDParam(fdList, want);
|
||||||
int32_t callerTokenId = static_cast<int32_t>(IPCSkeleton::GetCallingTokenID());
|
int32_t callerTokenId = static_cast<int32_t>(IPCSkeleton::GetCallingTokenID());
|
||||||
std::string callerPkg = DelayedSingleton<PrintBMSHelper>::GetInstance()->QueryCallerBundleName();
|
std::string callerPkg = DelayedSingleton<PrintBMSHelper>::GetInstance()->QueryCallerBundleName();
|
||||||
|
ingressPackage = callerPkg;
|
||||||
int32_t callerUid = IPCSkeleton::GetCallingUid();
|
int32_t callerUid = IPCSkeleton::GetCallingUid();
|
||||||
int32_t callerPid = IPCSkeleton::GetCallingPid();
|
int32_t callerPid = IPCSkeleton::GetCallingPid();
|
||||||
want.SetParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN, callerTokenId);
|
want.SetParam(AAFwk::Want::PARAM_RESV_CALLER_TOKEN, callerTokenId);
|
||||||
@ -504,6 +510,7 @@ int32_t PrintServiceAbility::QueryPrintJobById(std::string &printJobId, PrintJob
|
|||||||
|
|
||||||
int32_t PrintServiceAbility::StartPrintJob(const PrintJob &jobInfo)
|
int32_t PrintServiceAbility::StartPrintJob(const PrintJob &jobInfo)
|
||||||
{
|
{
|
||||||
|
startPrintTime_ = std::chrono::high_resolution_clock::now();
|
||||||
ManualStart();
|
ManualStart();
|
||||||
if (!CheckPermission(PERMISSION_NAME_PRINT_JOB)) {
|
if (!CheckPermission(PERMISSION_NAME_PRINT_JOB)) {
|
||||||
PRINT_HILOGE("no permission to access print service");
|
PRINT_HILOGE("no permission to access print service");
|
||||||
@ -802,15 +809,16 @@ int32_t PrintServiceAbility::UpdatePrintJobState(const std::string &jobId, uint3
|
|||||||
SendPrintJobEvent(*jobIt->second);
|
SendPrintJobEvent(*jobIt->second);
|
||||||
|
|
||||||
auto printerId = jobIt->second->GetPrinterId();
|
auto printerId = jobIt->second->GetPrinterId();
|
||||||
|
if (state == PRINT_JOB_BLOCKED) {
|
||||||
|
ReportHisysEvent(jobIt->second, printerId, subState);
|
||||||
|
}
|
||||||
if (state == PRINT_JOB_COMPLETED) {
|
if (state == PRINT_JOB_COMPLETED) {
|
||||||
if (jobInQueue) {
|
if (jobInQueue) {
|
||||||
printerJobMap_[printerId].erase(jobId);
|
printerJobMap_[printerId].erase(jobId);
|
||||||
queuedJobList_.erase(jobIt);
|
queuedJobList_.erase(jobIt);
|
||||||
}
|
}
|
||||||
if (printerJobMap_[printerId].empty()) {
|
if (printerJobMap_[printerId].empty()) {
|
||||||
NotifyAppJobQueueChanged(QUEUE_JOB_LIST_COMPLETED);
|
ReportCompletedPrint(printerId);
|
||||||
PRINT_HILOGD("no print job exists, destroy extension");
|
|
||||||
DestroyExtension(printerId);
|
|
||||||
}
|
}
|
||||||
SendQueuePrintJob(printerId);
|
SendQueuePrintJob(printerId);
|
||||||
}
|
}
|
||||||
@ -819,6 +827,55 @@ int32_t PrintServiceAbility::UpdatePrintJobState(const std::string &jobId, uint3
|
|||||||
return E_PRINT_NONE;
|
return E_PRINT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrintServiceAbility::ReportCompletedPrint(const std::string &printerId)
|
||||||
|
{
|
||||||
|
NotifyAppJobQueueChanged(QUEUE_JOB_LIST_COMPLETED);
|
||||||
|
PRINT_HILOGD("no print job exists, destroy extension");
|
||||||
|
DestroyExtension(printerId);
|
||||||
|
json msg;
|
||||||
|
auto endPrintTime = std::chrono::high_resolution_clock::now();
|
||||||
|
auto printTime = std::chrono::duration_cast<std::chrono::milliseconds>(endPrintTime - startPrintTime_);
|
||||||
|
msg["PRINT_TIME"] = printTime.count();
|
||||||
|
msg["INGRESS_PACKAGE"] = ingressPackage;
|
||||||
|
msg["STATUS"] = 0;
|
||||||
|
HisysEventUtil::reportPrintSuccess(msg.dump());
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrintServiceAbility::ReportHisysEvent(const std::shared_ptr<PrintJob> &jobInfo,
|
||||||
|
const std::string &printerId, uint32_t subState)
|
||||||
|
{
|
||||||
|
json msg;
|
||||||
|
auto endPrintTime = std::chrono::high_resolution_clock::now();
|
||||||
|
auto printTime = std::chrono::duration_cast<std::chrono::milliseconds>(endPrintTime - startPrintTime_);
|
||||||
|
msg["PRINT_TIME"] = printTime.count();
|
||||||
|
msg["INGRESS_PACKAGE"] = ingressPackage;
|
||||||
|
if (isEprint(printerId)) {
|
||||||
|
msg["PRINT_TYPE"] = 1;
|
||||||
|
} else {
|
||||||
|
msg["PRINT_TYPE"] = 0;
|
||||||
|
}
|
||||||
|
auto printInfo = printerInfoList_.find(printerId);
|
||||||
|
std::vector<uint32_t> fdList;
|
||||||
|
jobInfo->GetFdList(fdList);
|
||||||
|
msg["FILE_NUM"] = fdList.size();
|
||||||
|
msg["PAGE_NUM"] = fdList.size();
|
||||||
|
if (printInfo == printerInfoList_.end()) {
|
||||||
|
msg["MODEL"] = "";
|
||||||
|
} else {
|
||||||
|
msg["MODEL"] = printInfo->second->GetPrinterName();
|
||||||
|
}
|
||||||
|
msg["COPIES_SETTING"] = jobInfo->GetCopyNumber();
|
||||||
|
std::string option = jobInfo->GetOption();
|
||||||
|
PRINT_HILOGI("test option:%{public}s", option.c_str());
|
||||||
|
json optionJson = json::parse(option);
|
||||||
|
PRINT_HILOGI("test optionJson: %{public}s", optionJson.dump().c_str());
|
||||||
|
PRINT_HILOGI("test jobDescription: %{public}s", optionJson["jobDescription"].get<std::string>().c_str());
|
||||||
|
msg["JOB_DESCRIPTION"] = optionJson["jobDescription"].get<std::string>();
|
||||||
|
msg["PRINT_STYLE_SETTING"] = jobInfo->GetDuplexMode();
|
||||||
|
msg["FAIL_REASON_CODE"] = subState;
|
||||||
|
HisysEventUtil::faultPrint("PRINT_JOB_BLOCKED", msg.dump());
|
||||||
|
}
|
||||||
|
|
||||||
void PrintServiceAbility::NotifyAppJobQueueChanged(const std::string &applyResult)
|
void PrintServiceAbility::NotifyAppJobQueueChanged(const std::string &applyResult)
|
||||||
{
|
{
|
||||||
PRINT_HILOGD("NotifyAppJobQueueChanged started. %{public}s ", applyResult.c_str());
|
PRINT_HILOGD("NotifyAppJobQueueChanged started. %{public}s ", applyResult.c_str());
|
||||||
@ -830,6 +887,18 @@ void PrintServiceAbility::NotifyAppJobQueueChanged(const std::string &applyResul
|
|||||||
PRINT_HILOGD("NotifyAppJobQueueChanged end.");
|
PRINT_HILOGD("NotifyAppJobQueueChanged end.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PrintServiceAbility::isEprint(const std::string &printerId)
|
||||||
|
{
|
||||||
|
if (printerId.length() <= 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::string ePrintID = "ePrintID";
|
||||||
|
if (printerId.length() < ePrintID.length()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return std::equal(ePrintID.rbegin(), ePrintID.rend(), printerId.rbegin());
|
||||||
|
}
|
||||||
|
|
||||||
void PrintServiceAbility::DestroyExtension(const std::string &printerId)
|
void PrintServiceAbility::DestroyExtension(const std::string &printerId)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lock(apiMutex_);
|
std::lock_guard<std::recursive_mutex> lock(apiMutex_);
|
||||||
|
Loading…
Reference in New Issue
Block a user