当前位置:网站首页>Cinnamon 任务栏网速
Cinnamon 任务栏网速
2022-07-07 11:09:00 【海天鹰】
肝了几天, Cinnamon 任务栏网速做好了,无需编译,真香!
icon.png
metadata.json
{
"uuid": "[email protected]",
"name": "CMDU",
"description": "Uptime, CPU usage, memory usage, download bytes, upload bytes, download speed, upload speed"
}
applet.js
const Applet = imports.ui.applet;
const Util = imports.misc.util;
const {GLib, Gio} = imports.gi;
const PopupMenu = imports.ui.popupMenu;
const St = imports.gi.St;
var label;
var db0 = 0, ub0 = 0, tt0=0, idle0 = 0;
function MyApplet(orientation, panel_height, instance_id) {
this._init(orientation, panel_height, instance_id);
}
MyApplet.prototype = {
__proto__: Applet.TextApplet.prototype,
_init: function(orientation, panel_height, instance_id) {
Applet.TextApplet.prototype._init.call(this, orientation, panel_height, instance_id);
//global.logError('sonichy');
this.set_applet_label("↑ 0KB/s\n↓ 0KB/s");
this.menuManager = new PopupMenu.PopupMenuManager(this);
this.menu = new Applet.AppletPopupMenu(this, orientation);
this.menuManager.addMenu(this.menu);
label = new St.Label();
this.menu.addActor(label);
//https://gjs.guide/guides/gjs/asynchronous-programming.html
//GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1, this.update); //real name function do not run
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1, () => {
var net = this.net();
this.set_applet_label("↑ " + this.B2G(net.ubs) + "/s\n↓ " + this.B2G(net.dbs) + "/s");
var s = _("Uptime: " + this.uptime() + "\nCPU: " + this.cpu() + "%\nMem: " + this.mem() + "\nUp: " + this.B2G(net.ub) + "\nDown: "+ this.B2G(net.db));
this.set_applet_tooltip(s); //resize flash
label.set_text(s);
return true; // loop
});
},
uptime: function() {
//https://gjs.guide/guides/gio/file-operations.html
const file = Gio.File.new_for_path('/proc/uptime');
const [, contents, etag] = file.load_contents(null);
var t = contents.toString().split(' ');
var tt = Number(t[0]);
var h = ~~(tt/3600);
var m = ~~(tt%3600/60);
if (m < 10)
m = '0' + m;
var s = ~~(tt%3600%60);
if (s < 10)
s = '0' + s;
var hms = h + ':' + m + ':' + s;
return hms;
},
cpu: function() {
const file = Gio.File.new_for_path('/proc/stat');
const [, contents, etag] = file.load_contents(null);
var s = contents.toString().split('\n');
var ca = s[0].split(/\s+/);
var tt = 0;
for (var i=1; i<ca.length; i++) {
tt += Number(ca[i]);
}
global.log(tt);
var idle = Number(ca[4]);
var p = ~~(((tt - tt0) - (idle - idle0)) * 100 / (tt - tt0));
tt0 = tt;
idle0 = idle;
return p;
},
mem: function() {
const file = Gio.File.new_for_path('/proc/meminfo');
const [, contents, etag] = file.load_contents(null);
var s = contents.toString().split('\n');
var MT = s[0].split(/\s+/);
var MF = s[1].split(/\s+/);
var mt = Number(MT[1]);
var mf = Number(MF[1]);
var mu = mt - mf;
var p = ~~(mu / mt * 100);
var m = this.B2G(mu*1024) + ' / '+ this.B2G(mt*1024) + ' = ' + p + '%';
return m;
},
net: function() {
const file = Gio.File.new_for_path('/proc/net/dev');
const [, contents, etag] = file.load_contents(null);
var l = contents.toString().trim().split('\n');
var db = 0, ub = 0;
for (var i=2; i<l.length; i++) {
var la = l[i].trim().split(/\s+/);
db += Number(la[1]);
ub += Number(la[9]);
}
var dbs = db - db0;
var ubs = ub - ub0;
db0 = db;
ub0 = ub;
return {db, ub, dbs, ubs};
},
B2G: function(b) {
var s = '';
if (b > 999999999)
s = (b / 1073741824).toFixed(2) + ' GB';
else{
if (b > 999999)
s = (b / 1048576).toFixed(2) + ' MB';
else{
if (b > 999)
s = ~~(b / 1024) + ' KB';
else
s = b + ' B';
}
}
return s;
},
update: function() {
var date = new Date();
var s = date.getFullYear() + "/" + (date.getMonth()+1) + "/" + date.getDate() + "\n" + date.getHours() + ":" + date.getMinutes()+ ":" + date.getSeconds();
this.set_applet_label(s);
return true; // loop
},
on_applet_clicked: function() {
//Util.spawnCommandLine("gnome-system-monitor");
this.menu.toggle();
}
};
function main(metadata, orientation, panel_height, instance_id) {
return new MyApplet(orientation, panel_height, instance_id);
}
边栏推荐
- ACL 2022 | small sample ner of sequence annotation: dual tower Bert model integrating tag semantics
- Practical example of propeller easydl: automatic scratch recognition of industrial parts
- About the problem of APP flash back after appium starts the app - (solved)
- 详解ThinkPHP支持的URL模式有四种普通模式、PATHINFO、REWRITE和兼容模式
- Leetcode skimming: binary tree 27 (delete nodes in the binary search tree)
- Grep of three swordsmen in text processing
- Master formula. (used to calculate the time complexity of recursion.)
- 达晨与小米投的凌云光上市:市值153亿 为机器植入眼睛和大脑
- DHCP 动态主机设置协议 分析
- 初学XML
猜你喜欢

Blog recommendation | Apache pulsar cross regional replication scheme selection practice

leecode3. 无重复字符的最长子串

TPG x AIDU|AI领军人才招募计划进行中!

【学习笔记】zkw 线段树

ICLR 2022 | pre training language model based on anti self attention mechanism

.Net下極限生產力之efcore分錶分庫全自動化遷移CodeFirst

How to continue after handling chain interruption / sub chain error removed from scheduling

共创软硬件协同生态:Graphcore IPU与百度飞桨的“联合提交”亮相MLPerf

Go language learning notes - structure

【Presto Profile系列】Timeline使用
随机推荐
COSCon'22 社区召集令来啦!Open the World,邀请所有社区一起拥抱开源,打开新世界~
达晨与小米投的凌云光上市:市值153亿 为机器植入眼睛和大脑
谷歌浏览器如何重置?谷歌浏览器恢复默认设置?
Cmu15445 (fall 2019) project 2 - hash table details
Test next summary
Unity build error: the name "editorutility" does not exist in the current context
Leetcode brush questions: binary tree 19 (merge binary tree)
PCAP学习笔记二:pcap4j源码笔记
非分区表转换成分区表以及注意事项
Conversion from non partitioned table to partitioned table and precautions
The difference between cache and buffer
Sample chapter of "uncover the secrets of asp.net core 6 framework" [200 pages /5 chapters]
学习突围2 - 关于高效学习的方法
明星企业普渡科技大裁员:曾募资超10亿 腾讯红杉是股东
关于 appium 启动 app 后闪退的问题 - (已解决)
Sequoia China completed the new phase of $9billion fund raising
Aosikang biological sprint scientific innovation board of Hillhouse Investment: annual revenue of 450million yuan, lost cooperation with kangxinuo
Cloud detection 2020: self attention generation countermeasure network for cloud detection in high-resolution remote sensing images
[binary tree] delete points to form a forest
Day22 deadlock, thread communication, singleton mode