`
jobar
  • 浏览: 347343 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用nodejs和IgniteUI监控cpu和内存变化

 
阅读更多
css代码
#chart
{
    width: 700px;
    height: 500px;
    float: left;
}
#legend
{
    float: left;
}


html代码
<head>
    <title>cpu和内存使用监控</title>

    <script src="jquery/jquery-1.11.1.min.js"></script>
    <script src="jquery-ui-1.11.1/jquery-ui.min.js"></script>
    <script src="/node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>

    <link rel="stylesheet" href="IgniteUI/css/themes/infragistics/infragistics.theme.css" />
    <link rel="stylesheet" href="IgniteUI/css/structure/infragistics.css" />
    <link rel="stylesheet" href="IgniteUI/css/structure/modules/infragistics.ui.chart.css" />
    <script src="IgniteUI/js/infragistics.core.js"></script>
    <script src="IgniteUI/js/infragistics.dv.js"></script>

    <link rel="stylesheet" href="chart.css" />
</head>
<body>
    <div id="chart"></div>
    <div id="legend"></div>

    <script type="text/javascript" src="chart.js">
    </script>
    
</body>

chart.js
$(function () {
    var cpuData = [];

    function toDisplayCPU(v) {
        return v.toFixed(2);
    }

    function toDisplayMem(v) {
        if (v >= (1024 * 1024 * 1024)) {
            v /= (1024 * 1024 * 1024);
            return v.toFixed(2) + "GB";
        }

        if (v >= (1024 * 1024)) {
            v /= (1024 * 1024);
            return v.toFixed(2) + "MB";
        }

        if (v >= (1024)) {
            v /= (1024);
            return v.toFixed(2) + "KB";
        }

        return v;
    }

    function renderChart() {
        var chartOptions = {
            dataSource: cpuData,
            width: "700px",
            height: "500px",
            title: "System Performance",
            subtitle: "CPU utilization over time until present",
            horizontalZoomable: true,
            verticalZoomable: true,
            rightMargin: 30,
            legend: { element: "legend" },
            axes: [{
                type: "categoryX",
                name: "xAxis",
                label: "displayTime",
                labelAngle: 45
            }, {
                type: "numericY",
                name: "yAxis",
                title: "CPU Utilization",
                minimumValue: 0,
                maximumValue: 100,
                formatLabel: toDisplayCPU
            }, {
                type: "numericY",
                name: "yAxisMemory",
                title: "Memory Utilization",
                labelLocation: "outsideRight",
                minimumValue: 0,
                maximumValue: 8 * 1024 * 1024 * 1024,
                interval: 1024 * 1024 * 1024,
                formatLabel: toDisplayMem,
                majorStroke: "transparent"
            }],
            series: [{
                name: "cpu",
                type: "line",
                xAxis: "xAxis",
                yAxis: "yAxis",
                valueMemberPath: "cpuUsage",
                showTooltip: true,
                tooltipTemplate:
        "<div><em>CPU:</em>&nbsp<span>${item.displayCPU}</span></div>",
                title: "CPU Utilization"
            }, {
                name: "mem",
                type: "line",
                xAxis: "xAxis",
                yAxis: "yAxisMemory",
                valueMemberPath: "usedMem",
                showTooltip: true,
                tooltipTemplate:
        "<div><em>Memory:</em>&nbsp<span>${item.displayMem}</span></div>",
                title: "Memory Utilization"
            }, {
                name: "itemToolTips",
                type: "itemToolTipLayer",
                useInterpolation: false,
                transitionDuration: 300
            }]
        };

        $("#chart").igDataChart(chartOptions);

    }

    renderChart();

    var socket = io.connect("http://localhost:8080");

    socket.on("cpuUpdate", function (update) {
        var currTime = new Date();
        var displayString = currTime.toLocaleTimeString();
        update.displayCPU = toDisplayCPU(update.cpuUsage);
        update.displayMem = toDisplayMem(update.usedMem);
        update.displayTime = displayString;
        cpuData.push(update);
        $("#chart").igDataChart("notifyInsertItem",
            cpuData, cpuData.length - 1, update);
    });
});

后台用nodejs、express和socket.io获取系统的cpu和内存使用
var express = require("express");
var app = express();
var server = require("http").createServer(app);
var io = require("socket.io").listen(server);
var os = require("os");
var osUtils = require("os-utils");
var interval = -1;
var currCPU = 0;

app.use(express.static(__dirname));

server.listen(8080);

io.sockets.on('connection', function () {//连接事件
    if (interval < 0) {
        interval = setInterval(function () {
            var freeMem = os.freemem();
            var totalMem = os.totalmem();
            io.sockets.emit("cpuUpdate", {
                cpuUsage: currCPU * 100.0,
                freeMem: freeMem,
                totalMem: totalMem,
                usedMem: totalMem - freeMem
            });
        }, 10);//每隔10ms取系统数据
    }
});

function updateCPU() {
    setTimeout(function () {
        osUtils.cpuUsage(function (value) {
            currCPU = value;
            
            updateCPU();
        });
    }, 0);
}
updateCPU();
console.log("服务器已启动");

启动server



效果如下:



  • 大小: 8 KB
  • 大小: 57.2 KB
分享到:
评论

相关推荐

    nodejs的io获取,包括cpu,disk等

    通过利用内置模块或第三方库,我们可以轻松地获取CPU使用率、内存消耗、磁盘信息以及网络状态等数据。以下将详细介绍标题和描述中涉及的各个知识点: 1. **CPU使用率**: 在`cpu_0.js`中,可能会使用`os`模块来...

    NodeJS实现服务器监控工具.zip

    3. **数据采集**:为了监控服务器状态,项目需要采集诸如CPU使用率、内存占用、磁盘空间、网络流量等信息。NodeJS可以利用os模块获取操作系统级别的信息,或者使用第三方库如pm2或prometheus来收集更丰富的监控指标...

    Node.js-Easy-Monitor轻量级实时Node.js内核性能监控分析工具

    2. **内核级别监控**:与其他只关注应用层面性能的工具不同,Easy Monitor能够深入到Node.js的内核层,提供内存、CPU、网络、事件循环等关键指标的详细信息。这种深度监控有助于发现潜在的性能瓶颈和系统问题。 3. ...

    NodeJS学习笔记和代码

    2. **文件读写**:示例代码演示如何使用NodeJS读取和写入文件。 3. **HTTP客户端**:如何使用http模块发起HTTP请求,例如获取远程网页内容。 4. **路由处理**:使用Express等框架处理不同URL的请求。 5. **数据库...

    database-queries-nodejs-ignite

    标题 "database-queries-nodejs-ignite" 暗示了我们正在探讨如何在Node.js环境中使用某种数据库查询技术,可能是与Ignite相关的。Ignite是一个开源的内存数据平台,提供了分布式数据库、缓存和流处理服务。由于标签...

    webix-remote-js:适用于NodeJS和Webix UI的简单RPC

    Webix远程-Node.js 适用于NodeJS和Webix UI的简单RPC如何安装npm install webix-remote如何使用在服务器端var remote = require ( "webix-remote" ) ;var api = remote . server ( ) ;api . setMethod ( "add" , ...

    nodejs-ignite-challenge-code01

    标题 "nodejs-ignite-challenge-code01" 暗示这是一个关于 Node.js 的编程挑战,可能是某个在线学习平台或编程竞赛的一部分。"Ignite" 通常指的是加速、启动或激发,因此这可能是一个引导初学者掌握 Node.js 开发...

    NodeJS版本基于GB28181的管理平台,实现浏览器播放GB28181设备视频功能,并有二次开发API接口

    NodeJS是建立在Chrome V8引擎上的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。NodeJS的特点包括事件驱动、非阻塞I/O模型,使得它在处理高并发、实时通信场景下表现优秀。在这个GB28181管理...

    ignite-nodejs-desafio-1:PrimeJS设计和开发NodeJS-Ignite Rocketseat

    "ignite-nodejs-desafio-1:PrimeJS设计和开发NodeJS-Ignite Rocketseat" 是一个关于使用Node.js进行Web应用开发的挑战项目,由知名的在线教育平台Rocketseat的Ignite课程提供。这个项目主要关注JavaScript编程语言,...

    conceitos-nodejs-ignite:点燃火药库储存库

    标题 "conceitos-nodejs-ignite:点燃火药库储存库" 暗示这是一个关于 Node.js 的学习资源,特别是与 Ignite 相关的概念。Ignite 是一个由 Rocketseat 提供的在线课程,旨在帮助开发者深入理解 Node.js 的核心概念和...

    一个NodeJS和redis做的基于http协议的队列

    一个NodeJS和redis做的基于http协议使用的队列 做了点小修改 支持多个队列和post提交 原github地址:https: github com lnmp nodemq 使用方法: 在安装好redis和nodejs后 配置config js 执行: $ node index js ...

    基于nodejs的西餐外卖系统和微信小程序源码

    基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码基于nodejs的西餐外卖系统和微信小程序源码...

    nodejs 监控文件内容改变并获取新增的内容

    使用nodejs完成对文件的监控,并实时获取文件添加的最新内容

    nodejs-web调用摄像头

    6. **性能优化**:对于大规模的应用,需要考虑流数据传输的性能优化,如使用WebRTC的ICE、STUN和TURN服务器进行网络穿透。 综上所述,`getUserMedia`是实现Web调用摄像头的关键技术,结合Node.js服务器和前端交互,...

    nodejs.pdf nodejs初级教程 nodejs初级教程

    nodejs初级教程

    京东前端:PhantomJS和NodeJS在网站前端监控平台的最佳实践

    通常在一个大型的Web项目中有很多监控系统,比如后端的服务API监控,接口存活、调用、延迟等监控,这些一般都用来监控后台接口数据层面的信息。而且对于大型网站系统来说,从后端服务到前台展示会有很多层:内网VIP...

    NodeJS整理手册文档

    NodeJS是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程,从而打破了JavaScript只能在浏览器中运行的传统。本"NodeJS整理手册文档"旨在为对NodeJS感兴趣的朋友们提供一...

    Nodejs给前端带来了什么变化中文WORD版

    资源名称:Nodejs给前端带来了什么变化 中文WORD版内容简介:本文档主要讲述的是Nodejs给前端带来了什么变化;在软件开发领域,前端工程师曾经是一个比较纠结的职业。在Web技术真正发展起来之前的相当长一段时间里,...

    ignite-node-c3-d01:Desafio 02进行Captritu III射击,NodeJS do Ignite进行射击,火箭座

    Desafio-数据库查询 (Ignite | NodeJS |CapítuloIII | Desafio 01) Desafio 01做第III弹头NodeJS do Ignite,第3弹头。...使用查询进行查询的对象或类型的查询:TypeORM:USANDO ORM,USANDO查询生成器和原始查询。

    iot-nodejs, 使用nodejs连接到IBM的客户端库和示例.zip

    iot-nodejs, 使用nodejs连接到IBM的客户端库和示例 node.js-客户端库node.js 客户机用于简化与Things平台的交互。 以下库包含有关使用 nodejs ibmiotf node 与组织内的设备和应用程序进行交互的说明和指导。客户端库...

Global site tag (gtag.js) - Google Analytics