diff options
Diffstat (limited to 'src/services/cpu.ts')
| -rw-r--r-- | src/services/cpu.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/services/cpu.ts b/src/services/cpu.ts new file mode 100644 index 0000000..f1699f7 --- /dev/null +++ b/src/services/cpu.ts @@ -0,0 +1,45 @@ +import { GObject, interval, property, register } from "astal"; +import { cpu as config } from "config"; +import GTop from "gi://GTop"; + +@register({ GTypeName: "Cpu" }) +export default class Cpu extends GObject.Object { + static instance: Cpu; + static get_default() { + if (!this.instance) this.instance = new Cpu(); + + return this.instance; + } + + #previous: GTop.glibtop_cpu = new GTop.glibtop_cpu(); + #usage: number = 0; + + @property(Number) + get usage() { + return this.#usage; + } + + calculateUsage() { + const current = new GTop.glibtop_cpu(); + GTop.glibtop_get_cpu(current); + + // Calculate the differences from the previous to current data + const total = current.total - this.#previous.total; + const idle = current.idle - this.#previous.idle; + + this.#previous = current; + + return total > 0 ? ((total - idle) / total) * 100 : 0; + } + + update() { + this.#usage = this.calculateUsage(); + this.notify("usage"); + } + + constructor() { + super(); + + interval(config.interval, () => this.update()); + } +} |