LCOV - code coverage report
Current view: top level - pkg/kdump - kdump.js Coverage Total Hit
Test: cockpit Lines: 68.4 % 76 52
Test Date: 2026-07-17 07:33:01

            Line data    Source code
       1              : /*
       2              :  * Copyright (C) 2016 Red Hat, Inc.
       3              :  * SPDX-License-Identifier: LGPL-2.1-or-later
       4              :  */
       5              : 
       6              : import '../lib/patternfly/patternfly-6-cockpit.scss';
       7              : import 'polyfills'; // once per application
       8              : import 'cockpit-dark-theme'; // once per page
       9              : 
      10              : import cockpit from "cockpit";
      11              : 
      12            3 : import React from "react";
      13            3 : import { createRoot } from "react-dom/client";
      14              : 
      15              : import { KdumpPage } from "./kdump-view.jsx";
      16              : import * as kdumpClient from "./kdump-client.js";
      17              : import { superuser } from "superuser";
      18              : import { WithDialogs } from "dialogs.jsx";
      19              : 
      20              : import './kdump.scss';
      21              : 
      22            3 : superuser.reload_page_on_change();
      23              : 
      24            3 : const initStore = function(rootElement) {
      25            3 :     const root = createRoot(rootElement);
      26            3 :     const dataStore = { };
      27            3 :     dataStore.domRootElement = rootElement;
      28              : 
      29            3 :     dataStore.kdumpClient = new kdumpClient.KdumpClient();
      30              : 
      31            2 :     dataStore.saveSettings = settings =>
      32            2 :         dataStore.kdumpClient.validateSettings(settings)
      33            2 :                 .then(() => dataStore.kdumpClient.writeSettings(settings));
      34              : 
      35            0 :     dataStore.exportConfig = settings =>
      36            0 :         dataStore.kdumpClient.exportConfig(settings);
      37              : 
      38              :     // whether we're actively trying to change the state
      39            3 :     dataStore.stateChanging = false;
      40            0 :     function setServiceState(_event, desiredState) {
      41            0 :         if (dataStore.stateChanging) {
      42            0 :             console.log("already trying to change state");
      43            0 :             return;
      44            0 :         }
      45            0 :         const promise = desiredState ? dataStore.kdumpClient.ensureOn() : dataStore.kdumpClient.ensureOff();
      46            0 :         dataStore.stateChanging = true;
      47            0 :         dataStore.render();
      48            0 :         promise
      49            0 :                 .catch(error => console.warn("Failed to change kdump state:", error))
      50            0 :                 .finally(() => {
      51            0 :                     dataStore.stateChanging = false;
      52            0 :                     dataStore.render();
      53            0 :                 });
      54            0 :     }
      55            3 :     const render = function() {
      56            3 :         root.render(<WithDialogs>{React.createElement(KdumpPage, {
      57            3 :             kdumpActive: false,
      58            3 :             onSetServiceState: setServiceState,
      59            3 :             stateChanging: dataStore.stateChanging,
      60            3 :             reservedMemory: dataStore.kdumpMemory,
      61            3 :             kdumpStatus: dataStore.kdumpStatus,
      62            3 :             kdumpCmdlineEnabled: dataStore.crashkernel || false,
      63            3 :             onSaveSettings: dataStore.saveSettings,
      64            3 :             onCrashKernel: dataStore.kdumpClient.crashKernel,
      65            3 :             exportConfig: dataStore.exportConfig,
      66            3 :         })}</WithDialogs>);
      67            3 :     };
      68            3 :     dataStore.render = render;
      69              : 
      70            3 :     const crashkernelPromise = cockpit.file("/proc/cmdline").read()
      71            3 :             .then(content => {
      72            3 :                 if (content !== null) {
      73            3 :                     dataStore.crashkernel = content.indexOf('crashkernel=') !== -1;
      74            3 :                 }
      75            3 :             })
      76            0 :             .catch(err => console.error("cannot read /proc/cmdline", err));
      77              : 
      78              :     // read memory reserved for kdump from system
      79            3 :     dataStore.kdumpMemory = undefined;
      80            3 :     const crashsizePromise = cockpit.file("/sys/kernel/kexec_crash_size").read()
      81            3 :             .then(content => {
      82            3 :                 const value = parseInt(content, 10);
      83            3 :                 if (!isNaN(value)) {
      84              :                 // if it's only a number, guess from the size what units we should use
      85              :                 // https://access.redhat.com/solutions/59432 states limit to be 896MiB and the auto at 768MiB max
      86              :                 // default unit is MiB
      87            3 :                     if (value >= 1024 * 1024)
      88            0 :                         dataStore.kdumpMemory = value;
      89            3 :                     else if (value >= 1024)
      90            0 :                         dataStore.kdumpMemory = value * 1024;
      91              :                     else
      92            3 :                         dataStore.kdumpMemory = value * 1024 * 1024;
      93            0 :                 } else {
      94            0 :                     dataStore.kdumpMemory = 0;
      95            0 :                 }
      96            3 :             })
      97            0 :             .catch(() => { dataStore.kdumpMemory = "error" });
      98              : 
      99            3 :     Promise.allSettled([crashkernelPromise, crashsizePromise]).then(render);
     100              : 
     101              :     // catch kdump config and service changes
     102            3 :     dataStore.kdumpClient.addEventListener('kdumpStatusChanged', function(event, status) {
     103            3 :         dataStore.kdumpStatus = status;
     104            3 :         render();
     105            3 :     });
     106              : 
     107              :     // render once
     108            3 :     render();
     109              : 
     110            3 :     return dataStore;
     111            3 : };
     112              : 
     113            3 : document.addEventListener("DOMContentLoaded", function() {
     114            3 :     initStore(document.getElementById('app'));
     115            3 : });
        

Generated by: LCOV version 2.0-1