Review of "Resource Pulse" version 1

Details Page Preview

Your computer's vital signs, one glance away: CPU, memory, battery, disk, network, temperature, power and GPU, live in the top bar and in a dropdown dashboard with charts, per-core and per-sensor readings, the busiest processes and alerts. * Usage tracking: which apps used the processor, memory, disk, graphics and battery, hour by hour, for 14 days * Diagnostics: what runs in the background, holds memory or drains the battery, with the evidence * Fix with an agent: hand the findings to a coding agent you choose; it runs in a terminal and asks before changing anything * Under 1 % of one core with the panel closed; everything stays on this computer

Extension Homepage
https://github.com/StefanAMN/System-Monitor-GNOME-Extension

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 3

Shexli found 3 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • lib/collectors/appio.js:65
    GLib.file_get_contents(`${this._proc}/${pid}/io`)
  • lib/collectors/process.js:186
    GLib.file_get_contents(`/proc/${pids[next]}/io`)
  • lib/collectors/process.js:199
    GLib.file_get_contents(`/proc/${pids[next]}/stat`)
  • lib/collectors/process.js:352
    GLib.file_get_contents(`${proc}/${pid}/stat`)
  • lib/engine/netusage.js:99
    GLib.file_get_contents('/proc/sys/kernel/random/boot_id')
  • lib/engine/sessiontotals.js:23
    GLib.file_get_contents('/proc/self/stat')

EGO-L-002 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • extension.js:155
    this._indicatorBox = new St.BoxLayout({ style_class: 'resource-pulse-indicator-box' })
  • extension.js:182
            this._menuContainer = new St.BoxLayout({
                vertical: true,
                style_class: 'resource-pulse-menu-section',
                accessible_name: _('Resource Pulse panel'),
                reactive: true,
                x_expand: true,
                y_expand: true
            })
  • extension.js:164
    this._menuSection = new PopupMenu.PopupBaseMenuItem({ reactive: false, activate: false, can_focus: false })
  • extension.js:223
    this._menuViewport = new St.BoxLayout({ vertical: true, x_expand: true, y_expand: true })
  • extension.js:168
            this._popupStack = new St.Widget({
                layout_manager: new Clutter.BinLayout(),
                x_expand: true,
                y_expand: true
            })
  • extension.js:174
            this._scrollView = new St.ScrollView({
                style_class: 'resource-pulse-scroll-view',
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
                x_expand: true,
                y_expand: true
            })

EGO-L-003 warning

signals connected by extension should be disconnected in disable()

Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.

Disconnect all signals

  • extension.js:323
            this._clearHistoryId = this._settings.connect('changed::action-clear-history', () => {
                if (!this._settings.get_boolean('action-clear-history')) return;
                this._settings.set_boolean('action-clear-history', false);
                if (this._tracker) {
                    this._tr
  • extension.js:318
            this._flushHistoryId = this._settings.connect('changed::action-flush-history', () => {
                if (!this._settings.get_boolean('action-flush-history')) return;
                this._settings.set_boolean('action-flush-history', false);
                this._tracker?.save();
            })
  • extension.js:317
    this._trackingId = this._settings.connect('changed::battery-tracking', () => this._syncTracking())

All Versions

Version Status
1 Unreviewed