antosdk-apps/JarvisControl/coffees/main.coffee
2020-08-16 02:17:59 +02:00

99 lines
3.6 KiB
CoffeeScript

class JarvisControl extends this.OS.application.BaseApplication
constructor: ( args ) ->
super "JarvisControl", args
main: () ->
@batterychart = $(@find("battery-area")).epoch({
type: 'time.line',
axes: ['bottom', 'left', "right"],
range: [2500, 4300]
data: [{
label: "Battery",
values: []
}]
})
@tempchart = $(@find("temp-area")).epoch({
type: 'time.line',
axes: ['bottom', 'left', "right"],
range: [0, 100],
data: [{
label: "Temperature",
values: []
}]
})
@memchart = $(@find("mem-area")).epoch({
type: 'time.gauge',
value: 0
})
@diskchart = $(@find("disk-area")).epoch({
type: 'time.gauge',
value: 0
})
@cpuchart = $(@find("cpu-area")).epoch({
type: 'time.gauge',
value: 0
})
checklib = () =>
if not Antunnel.tunnel
@error __("The Antunnel service is not started, please start it first")
.catch (e) =>
@error e.toString(), e
@quit()
else
@tunnel = Antunnel.tunnel
@sub = new Antunnel.Subscriber("notification")
@sub.onopen = () =>
#@sub.send Antunnel.Msg.DATA, new TextEncoder("utf-8").encode("Hello")
console.log("Subscribed to notification channel")
@_gui.pushService("JarvisControl/JarvisService")
@sub.onerror = (e) =>
@error __("Error: {0}", new TextDecoder("utf-8").decode(e.data)), e
#@sub = undefined
@sub.onmessage = (e) =>
obj = JSON.parse(new TextDecoder("utf-8").decode(e.data)) if e.data
# update the battery
@display obj
@sub.onclose = () =>
@sub = undefined
@notify __("Unsubscribed to the notification service")
@quit()
Antunnel.tunnel.subscribe @sub
@on "resize", () =>
el = @find("battery-area")
@batterychart.option("width", $(el).width())
@batterychart.option("height", $(el).height())
el = @find("temp-area")
@tempchart.option("width", $(el).width())
@tempchart.option("height", $(el).height())
checklib()
display: (data) ->
mem_percent = parseFloat(data.mem.match(/([0-9\.]+)%/)[1])
@memchart.push mem_percent / 100.0
@find("mem-text").text = data.mem
disk_percent = parseFloat(data.disk.match(/([0-9\.]+)%/)[1])
@diskchart.push disk_percent / 100.0
@find("disk-text").text = data.disk
cpu_percent = parseFloat(data.cpu.match(/([0-9\.]+)$/)[1])
@cpuchart.push cpu_percent / 100.0
@find("cpu-text").text = data.cpu
@batterychart.push [{time: (new Date()).timestamp(), y: data.battery}]
@find("bat-text").text = __("Battery Usage: {0} mv ({1}%)", data.battery, Math.round(data.battery_percent))
@tempchart.push [{time: (new Date()).timestamp(), y: data.temp}]
@find("temp-text").text = __("CPU temperature: {0} C", data.temp)
cleanup: () ->
return unless @sub
@sub.close()
JarvisControl.singleton = true
this.OS.register "JarvisControl", JarvisControl