前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(二)

全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(二)

原创
作者头像
Openskeye
发布2023-04-03 10:08:55
3230
发布2023-04-03 10:08:55
举报

全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(二)

1、写在前面

上一篇中我们简单讲解了 健康状态 的功能。

实际上,仅仅从效果图上看不足以了解。

所以接下来,我们准备好实现一个简单的 健康状态场景,才能理解其强大。

2、正文开始

首先,健康状态 的实质是 状态监控,这点我们一点要记住。

因此,我们首先需要一个无限获取状态的 Linux 守护进程Windows 服务

这里先简单称其为 Monitor

我们的 SkeyeARS 需要 Monitor 提供所有的软硬件状态。

因此,Monitor 需要做到以下几点:

  • 提供设备的软件资源监控。

而我们主要实现的是对运行程序的监控,即所谓的 看门狗

所以只需要获取监控程序运行状态即可,下面是获取进程数的 Windows 实现。

代码语言:c++
复制
int MonitorApi::getProcessCount(const QString &processName)
{
    //进程计数
    static bool initialized = false;

    int count = 0;
    QString fileName = QFileInfo(processName).fileName();
    QString fullName = QDir::toNativeSeparators(QFileInfo(processName).absoluteFilePath());

#ifdef Q_OS_WIN
    if (!initialized) {
        //提升进程权限
        LUID luidTmp;
        HANDLE tokenHnadle;
        TOKEN_PRIVILEGES tkp;
        if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tokenHnadle)) {
            if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidTmp)) {
                qDebug() << "LookupPrivilegeValue Faile! Error =" << GetLastError();
                CloseHandle(tokenHnadle);
            }

            tkp.PrivilegeCount = 1;
            tkp.Privileges[0].Luid = luidTmp;
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

            if(!AdjustTokenPrivileges(tokenHnadle, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {
                qDebug() << "AdjustTokenPrivileges Faile! Error =" << GetLastError();
                CloseHandle(tokenHnadle);
            }
            CloseHandle(tokenHnadle);
        }
        initialized = true;
    }

    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    //创建进程快照句柄
    HANDLE processSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    //创建句柄失败
    if (processSnapshotHandle == INVALID_HANDLE_VALUE)
        return -1;

    //找第一个
    bool isExist = Process32First(processSnapshotHandle, &pe32);

    while(isExist) {
        auto name = QString::fromWCharArray(pe32.szExeFile);
        //进程名不区分大小写
        if(fileName.compare(name, Qt::CaseInsensitive) == 0) {
            HMODULE modules[512] = {0};
            DWORD needed = 0;
            TCHAR mouduleName[MAX_PATH];
            BOOL is64Process;
            HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
            if (processHandle) {
                IsWow64Process(processHandle, &is64Process); //判断是32位还是64位进程
                EnumProcessModulesEx(processHandle, modules, sizeof(modules), &needed, is64Process ? LIST_MODULES_32BIT : LIST_MODULES_64BIT);
                if (needed > 0) {
                    GetModuleFileNameEx(processHandle, modules[0], mouduleName, MAX_PATH);
                    if (QString::fromWCharArray(mouduleName) == fullName)
                        count++;
                }
                CloseHandle(processHandle);
            }
        }
        //找下一个
        isExist = Process32Next(processSnapshotHandle, &pe32);
    }
#endif

    return count;
}
  • 提供机器的硬件资源监控。

所谓硬件资源,主要分为三种:

1、磁盘使用。

2、CPU 利用率。

3、内存使用率。

4、网络流量。

  • 提供状态给所有需要的系统( 例如 SkeyeARS )。

而如何将状态提供给其他系统呢,一种想法使用消息队列。

我们可以将获取到的软硬件资源,封装后发布出去。

对于感兴趣的系统,则可以按自己的需要,订阅消息即可。

在我们的 Monitor 中,采用的消息队列为:ZeroMQ

关于SkeyeARS

SkeyeARS全景AR增强监视系统, 是视开科技开发的一款基于宽场景多路视频无缝拼接、视频实时增强、监视目标增强显示、目标自动跟踪、视频存储回放、远程数据传输和多通道全景视频同步显示等功能的综合视频AR增强监视系统,广泛应用于智慧交通、智慧城市、智慧机场等大场景智能监控领域。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(二)
    • 1、写在前面
      • 2、正文开始
        • 关于SkeyeARS
        相关产品与服务
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档