private updateData()

in gui/frontend/src/modules/db-editor/PerformanceDashboard.tsx [1208:1412]


    private updateData(data: Array<[string, string]>, lsnDiff = 0): void {
        const { onGraphDataChange } = this.props;
        const { graphData } = this.state;

        const oldValues = graphData.currentValues;
        const incomingNetworkData = graphData.series.get("incomingNetworkData") ?? [];
        const outgoingNetworkData = graphData.series.get("outgoingNetworkData") ?? [];
        const clientConnectionsData = graphData.series.get("clientConnectionsData") ?? [];
        const sqlStatementsData = graphData.series.get("sqlStatementsData") ?? [];
        const innoDBDiskWritesData = graphData.series.get("innoDBDiskWritesData") ?? [];
        const innoDBDiskReadsData = graphData.series.get("innoDBDiskReadsData") ?? [];
        const mleHeapUsageData = graphData.series.get("mleHeapUsageData") ?? [];


        const currentValues = this.extractCurrentValues(data);
        const time = new Date();
        const timestamp = time.getTime();

        const timeDiff = (timestamp - graphData.timestamp) / 1000; // In seconds.
        const relativeValue = (name: string): number => {
            const oldValue = oldValues.get(name) ?? currentValues.get(name) ?? 0;
            const newValue = currentValues.get(name) ?? 0;

            return (newValue - oldValue) / timeDiff;
        };

        incomingNetworkData.shift();
        incomingNetworkData.push({
            xValue: timestamp,
            yValue: relativeValue("Bytes_received"),
        });

        outgoingNetworkData.shift();
        outgoingNetworkData.push({
            xValue: timestamp,
            yValue: relativeValue("Bytes_sent"),
        });

        clientConnectionsData.shift();
        clientConnectionsData.push({
            xValue: timestamp,
            yValue: currentValues.get("Threads_connected"),
        });

        mleHeapUsageData.shift();
        mleHeapUsageData.push({
            xValue: timestamp,
            yValue: currentValues.get("mle_memory_used"),
        });

        const threadsCached = currentValues.get("Threads_cached") ?? 0;
        const threadsConnected = currentValues.get("Threads_connected") ?? 0;
        const threadsCreated = currentValues.get("Threads_created") ?? 0;
        const threadsRunning = currentValues.get("Threads_running") ?? 0;

        const openFiles = currentValues.get("Open_files") ?? 0;
        const openStreams = currentValues.get("Open_streams") ?? 0;
        const openTableDefinitions = currentValues.get("Open_table_definitions") ?? 0;
        const openTables = currentValues.get("Open_tables") ?? 0;
        const openedTableDefinitions = currentValues.get("Opened_table_definitions") ?? 0;
        const openedTables = currentValues.get("Opened_tables") ?? 0;

        const trxBegin = currentValues.get("Com_begin") ?? 0;
        const trxCommit = currentValues.get("Com_commit") ?? 0;
        const trxReleaseSavepoint = currentValues.get("Com_release_savepoint") ?? 0;
        const trxRollback = currentValues.get("Com_rollback") ?? 0;
        const trxRollbackToSavepoint = currentValues.get("Com_rollback_to_savepoint") ?? 0;
        const trxSavepoint = currentValues.get("Com_savepoint") ?? 0;

        const selects = Math.round(relativeValue("Com_select"));
        const inserts = Math.round(relativeValue("Com_insert"));
        const updates = Math.round(relativeValue("Com_update"));
        const deletes = Math.round(relativeValue("Com_delete"));
        const creates = Math.round(relativeValue("Com_create_db") + relativeValue("Com_create_event") +
            relativeValue("Com_create_function") + relativeValue("Com_create_index") +
            relativeValue("Com_create_procedure") + relativeValue("Com_create_server") +
            relativeValue("Com_create_table") + relativeValue("Com_create_trigger") + relativeValue("Com_create_udf") +
            relativeValue("Com_create_user") + relativeValue("Com_create_view"));
        const alters = Math.round(relativeValue("Com_alter_db") + relativeValue("Com_alter_db_upgrade") +
            relativeValue("Com_alter_event") + relativeValue("Com_alter_function") +
            relativeValue("Com_alter_procedure") + relativeValue("Com_alter_server") +
            relativeValue("Com_alter_table") + relativeValue("Com_alter_tablespace") + relativeValue("Com_alter_user"));
        const drops = Math.round(relativeValue("Com_drop_db") + relativeValue("Com_drop_event") +
            relativeValue("Com_drop_function") + relativeValue("Com_drop_index") + relativeValue("Com_drop_procedure") +
            relativeValue("Com_drop_server") + relativeValue("Com_drop_table") + relativeValue("Com_drop_trigger") +
            relativeValue("Com_drop_user") + relativeValue("Com_drop_view"));

        const totalStatements = selects + inserts + updates + deletes + creates + alters + drops;

        sqlStatementsData.shift();
        sqlStatementsData.shift();
        sqlStatementsData.shift();
        sqlStatementsData.push({
            xValue: timestamp,
            yValue: selects,
            group: "select",
        });
        sqlStatementsData.push({
            xValue: timestamp,
            yValue: inserts + updates + deletes,
            group: "dml",
        });
        sqlStatementsData.push({
            xValue: timestamp,
            yValue: creates + alters + drops,
            group: "ddl",
        });

        const hits = currentValues.get("Table_open_cache_hits") ?? 0;
        const misses = currentValues.get("Table_open_cache_misses") ?? 1;
        const tableCacheEfficiency = hits / (hits + misses);

        const dataSize = currentValues.get("Innodb_buffer_pool_bytes_data") ?? 0;
        const innoDBPageSize = currentValues.get("Innodb_page_size") ?? 0;
        const totalPageCount = currentValues.get("Innodb_buffer_pool_pages_total") ?? 0;
        const innoDBBufferPoolUsage = dataSize / innoDBPageSize / totalPageCount;

        const innoDBBufferReads = relativeValue("Innodb_buffer_pool_read_requests");
        const innoDBBufferWrites = relativeValue("Innodb_buffer_pool_write_requests");
        const innoDBBufferDiskReads = relativeValue("Innodb_buffer_pool_reads");
        const innoDBBufferReadRatio = innoDBBufferReads === 0 ? 0 : innoDBBufferDiskReads / innoDBBufferReads;

        const innoDBRedoLogDataWritten = relativeValue("Innodb_os_log_written");
        const innoDBRedoLogWrites = relativeValue("Innodb_log_writes");
        const innoDBDoubleWriteBufferWrites = relativeValue("Innodb_dblwr_writes");
        const innoDBDataWritten = relativeValue("Innodb_data_written");
        const innoDBDataRead = relativeValue("Innodb_data_read");

        innoDBDiskWritesData.shift();
        innoDBDiskWritesData.push({
            xValue: timestamp,
            yValue: innoDBDataWritten,
        });

        innoDBDiskReadsData.shift();
        innoDBDiskReadsData.push({
            xValue: timestamp,
            yValue: innoDBDataRead,
        });

        const logFileSize = currentValues.get("Innodb_log_file_size") ?? 1;
        const logFilesInGroup = currentValues.get("Innodb_log_files_in_group") ?? 1;
        const checkpointAge = lsnDiff / logFileSize * logFilesInGroup;

        onGraphDataChange?.({
            timestamp,
            activeColorScheme: graphData.activeColorScheme,
            displayInterval: graphData.displayInterval,
            currentValues,
            computedValues: {
                threadsCached,
                threadsConnected,
                threadsCreated,
                threadsRunning,

                openFiles,
                openStreams,
                openTableDefinitions,
                openTables,
                openedTableDefinitions,
                openedTables,

                trxBegin,
                trxCommit,
                trxReleaseSavepoint,
                trxRollback,
                trxRollbackToSavepoint,
                trxSavepoint,

                tableCacheEfficiency,
                totalStatements,

                selects,
                creates,
                inserts,
                updates,
                deletes,
                alters,
                drops,

                innoDBBufferPoolUsage,
                innoDBBufferReads,
                innoDBBufferWrites,
                innoDBBufferDiskReads,

                innoDBRedoLogDataWritten,
                innoDBRedoLogWrites,
                innoDBDoubleWriteBufferWrites,
                innoDBDataWritten,
                innoDBDataRead,
                innoDBBufferReadRatio,

                checkpointAge,
            },
            series: new Map([
                ["incomingNetworkData", incomingNetworkData],
                ["outgoingNetworkData", outgoingNetworkData],
                ["clientConnectionsData", clientConnectionsData],
                ["sqlStatementsData", sqlStatementsData],
                ["innoDBDiskWritesData", innoDBDiskWritesData],
                ["innoDBDiskReadsData", innoDBDiskReadsData],
                ["mleHeapUsageData", mleHeapUsageData],
            ]),
        });
    }