v0.14.1
This commit is contained in:
+41
-19
@@ -395,28 +395,50 @@ setInterval(() => { if (app.currentView === 'settings') renderSystemInfo(); }, 3
|
||||
|
||||
|
||||
async function refreshGreeCloudRuntimeStatus() {
|
||||
const account = $('#greeCloudAccountStatus');
|
||||
const mqtt = $('#greeCloudMqttStatus');
|
||||
if (!account || !mqtt) return;
|
||||
const setText = (selector, value) => { const node = $(selector); if (node) node.textContent = value; };
|
||||
const summary = $('.cloud-runtime-summary');
|
||||
if (!summary) return;
|
||||
const metricSelectors = [
|
||||
'#greeCloudAccountStatus', '#greeCloudMqttStatus', '#greeCloudDevicesOnline', '#greeCloudRestResponseTime',
|
||||
'#greeCloudResponseTime', '#greeCloudLastDeviceResponse', '#greeCloudLastMqttMessage', '#greeCloudConnectedSince',
|
||||
'#greeCloudBroker', '#greeCloudTraffic',
|
||||
];
|
||||
const setMetric = (selector, value, visible) => {
|
||||
const node = $(selector); if (!node) return 0;
|
||||
const row = node.closest('div');
|
||||
if (row) row.hidden = !visible;
|
||||
if (visible) node.textContent = value;
|
||||
return visible ? 1 : 0;
|
||||
};
|
||||
const lastContact = $('#greeCloudLastContact');
|
||||
const lastContactRow = lastContact?.closest('small');
|
||||
try {
|
||||
const status = await api('/api/integrations/gree-cloud/status');
|
||||
const runtime = status.runtime || {};
|
||||
account.textContent = String(status.account_status || 'unknown').replaceAll('_', ' ');
|
||||
mqtt.textContent = String(status.mqtt_status || 'disconnected').replaceAll('_', ' ');
|
||||
setText('#greeCloudDevicesOnline', `${Number(status.online_device_count || 0)} / ${Number(status.device_count || 0)}`);
|
||||
setText('#greeCloudRestResponseTime', status.last_rest_response_time_ms != null && Number.isFinite(Number(status.last_rest_response_time_ms)) ? `${Number(status.last_rest_response_time_ms)} ms` : tr('common.unavailable'));
|
||||
setText('#greeCloudResponseTime', runtime.last_response_time_ms != null && Number.isFinite(Number(runtime.last_response_time_ms)) ? `${Number(runtime.last_response_time_ms)} ms` : tr('common.unavailable'));
|
||||
setText('#greeCloudLastDeviceResponse', runtime.last_device_response ? dateTime(runtime.last_device_response) : tr('common.unavailable'));
|
||||
setText('#greeCloudLastMqttMessage', runtime.last_mqtt_message ? dateTime(runtime.last_mqtt_message) : tr('common.unavailable'));
|
||||
setText('#greeCloudConnectedSince', runtime.mqtt_connected_since ? dateTime(runtime.mqtt_connected_since) : tr('common.unavailable'));
|
||||
setText('#greeCloudBroker', runtime.broker_host || tr('common.unavailable'));
|
||||
setText('#greeCloudTraffic', `${Number(runtime.requests_sent || 0)} / ${Number(runtime.responses_received || 0)} / ${Number(runtime.request_timeouts || 0)}`);
|
||||
if (status.last_successful_contact) setText('#greeCloudLastContact', dateTime(status.last_successful_contact));
|
||||
const enabled = status.enabled === true;
|
||||
const deviceCount = Number(status.device_count || 0);
|
||||
const onlineCount = Number(status.online_device_count || 0);
|
||||
const accountStatus = String(status.account_status || '').trim();
|
||||
const mqttStatus = String(status.mqtt_status || '').trim();
|
||||
const restMs = Number(status.last_rest_response_time_ms);
|
||||
const responseMs = Number(runtime.last_response_time_ms);
|
||||
const traffic = [Number(runtime.requests_sent || 0), Number(runtime.responses_received || 0), Number(runtime.request_timeouts || 0)];
|
||||
let visibleCount = 0;
|
||||
visibleCount += setMetric('#greeCloudAccountStatus', accountStatus.replaceAll('_', ' '), enabled && !!accountStatus && accountStatus !== 'disabled');
|
||||
visibleCount += setMetric('#greeCloudMqttStatus', mqttStatus.replaceAll('_', ' '), enabled && !!mqttStatus && (mqttStatus === 'connected' || deviceCount > 0 || !['disconnected', 'disabled'].includes(mqttStatus)));
|
||||
visibleCount += setMetric('#greeCloudDevicesOnline', `${onlineCount} / ${deviceCount}`, deviceCount > 0);
|
||||
visibleCount += setMetric('#greeCloudRestResponseTime', `${restMs} ms`, Number.isFinite(restMs) && restMs >= 0);
|
||||
visibleCount += setMetric('#greeCloudResponseTime', `${responseMs} ms`, Number.isFinite(responseMs) && responseMs >= 0);
|
||||
visibleCount += setMetric('#greeCloudLastDeviceResponse', dateTime(runtime.last_device_response), !!runtime.last_device_response);
|
||||
visibleCount += setMetric('#greeCloudLastMqttMessage', dateTime(runtime.last_mqtt_message), !!runtime.last_mqtt_message);
|
||||
visibleCount += setMetric('#greeCloudConnectedSince', dateTime(runtime.mqtt_connected_since), !!runtime.mqtt_connected_since);
|
||||
visibleCount += setMetric('#greeCloudBroker', runtime.broker_host || '', !!String(runtime.broker_host || '').trim());
|
||||
visibleCount += setMetric('#greeCloudTraffic', traffic.join(' / '), traffic.some(value => value > 0));
|
||||
summary.hidden = visibleCount === 0;
|
||||
if (lastContactRow) lastContactRow.hidden = !status.last_successful_contact;
|
||||
if (lastContact && status.last_successful_contact) lastContact.textContent = dateTime(status.last_successful_contact);
|
||||
} catch (_) {
|
||||
account.textContent = 'unknown';
|
||||
mqtt.textContent = 'disconnected';
|
||||
['#greeCloudDevicesOnline', '#greeCloudRestResponseTime', '#greeCloudResponseTime', '#greeCloudLastDeviceResponse', '#greeCloudLastMqttMessage', '#greeCloudConnectedSince', '#greeCloudBroker', '#greeCloudTraffic'].forEach(selector => setText(selector, tr('common.unavailable')));
|
||||
metricSelectors.forEach(selector => setMetric(selector, '', false));
|
||||
summary.hidden = true;
|
||||
if (lastContactRow) lastContactRow.hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user