通过scriptable 可以用javascript编写IOS桌面组件。
- 在slurm服务器上创建api(基于flask)
# coding:utf-8
from flask import Flask,request
import json
from slurm_info import *
app=Flask(__name__)
@app.route("/slurm_info",methods=["GET"])
def get_slurm():
s = get_slurm_info()
return json.dumps(s, ensure_ascii=False)
if __name__ == "__main__":
#app.run(debug=True)
app.run(host='0.0.0.0', port=5000)
- slurm信息的解析
# coding:utf-8
import requests
import os
import subprocess
import json
def get_slurm_info():
cmd_order = '''squeue'''
cmd_p = subprocess.Popen(cmd_order, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = cmd_p.stdout.readlines()
length = len(result)
#print(length)
s = {}
for index, row in enumerate(result[1:]):
#print(index, row[:-1].split())
tlist = row[:-1].split()
tempdict = {}
tempdict["JID"] = str(tlist[0])
tempdict["USER"] = str(tlist[3][:5]) if len(tlist[3])>3 else str(tlist[3]) + " " * int(4 - len(tlist[3]))
tempdict["TIME"] = parse_time(tlist[5])
tempdict["ST"] = str(tlist[4]) if len(tlist[4])==2 else str(tlist[4]) + " "
tempdict["NODE"] = str(tlist[7][:5])
s[index] = tempdict
return s
def parse_time(time):
print(time)
t = time.split(":")[:-1]
print(t)
t_ = []
if len(t) == 1: #0:00
t_.append("0")
t_.append("00")
for i in t:
if len(i) == 2:
t_.append(i)
else:
t_.append("0"+i)
time = ":".join(t_)
return time
if len(t) == 2: #00:00:00
t_.append("0")
for i in t:
print(i)
if len(i) == 2:
t_.append(i)
else:
t_.append("0"+i)
time = ":".join(t_)
return time
if len(t) == 3: #1:00:00:00
time = ":".join(t_)
return time
- scriptable脚本
const w = new ListWidget()
const fontsize = 16
const spacer = 10
const spacer2 = 4
const font = new Font("Courier", fontsize)
//var textjson = {}
//textjson[0] = {"JID":"12345", "USER":" lxl " , "TIME":" 0:00:00", "ST":"PD", "NODE":"MAXal"}
//textjson[1] = {"JID":"12349", "USER":" ssy1", "TIME":" 1:10:00", "ST":"R ", "NODE":"nodeH"}
var textjson = await get({url:"http://0.0.0.0:5000/slurm_info"})
//对应接口
for(var item in textjson){
console.log(textjson.item)
}
w.backgroundColor = new Color("#3ca4fe", 0.6);
stack =w.addStack()
stack.centerAlignContent()
stack.addSpacer(0)
stack.addText("JOBID").font = font
stack.addSpacer(2)
stack.addText("USER").font = font
stack.addSpacer(23)
stack.addText("TIME").font = font
stack.addSpacer(13)
stack.addText("ST").font = font
stack.addSpacer(10)
stack.addText("NODE").font = font
for(var item in textjson){
const stack =w.addStack()
stack.centerAlignContent()
let row = textjson[item]
stack.addText(row["JID"]).font = font
stack.addSpacer(spacer2)
stack.addText(row["USER"]).font = font
stack.addSpacer(spacer2)
stack.addText(row["TIME"]).font = font
stack.addSpacer(spacer2)
stack.addText(row["ST"]).font = font
stack.addSpacer(spacer2)
stack.addText(row["NODE"]).font = font
}
Script.setWidget(w)
Script.complete()
w.presentLarge()
async function get(opts) {
const request = new Request(opts.url)
request.headers = {
...opts.headers,
...this.defaultHeaders
}
var result=await request.loadJSON()
console.log(result)
return result
}
- scriptable默认刷新时间为15分钟,监控效果如下