| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| /** Constants for all the available zone names. */ |
| var zones = Object.freeze({ |
| US_CENTRAL1_C: 'us-central1-c', |
| US_CENTRAL1_A: 'us-central1-a', |
| US_CENTRAL1_B: 'us-central1-b', |
| US_CENTRAL1_F: 'us-central1-f', |
| EUROPE_WEST1_B: 'europe-west1-b', |
| EUROPE_WEST1_C: 'europe-west1-b', |
| EUROPE_WEST1_D: 'europe-west1-d', |
| ASIA_EAST1_A: 'asia-east1-a', |
| ASIA_EAST1_B: 'asia-east1-b', |
| ASIA_EAST1_C: 'asia-east1-c', |
| }); |
| |
| /** Constants for all the metric names in the raw data. */ |
| var metricNames = Object.freeze({ |
| MN_BINARY_DISCHARGER: 'binary discharger', |
| MN_BENCHMARKS: 'benchmark service', |
| MN_IDENTITY: 'identity service', |
| MN_MACAROON: 'macaroon service', |
| MN_MOUNTTABLE: 'mounttable', |
| MN_PROXY: 'proxy service', |
| MN_ROLE: 'role service', |
| MN_SB_ALLOCATOR: 'syncbase allocator', |
| MN_MT_MOUNTED_SERVERS: 'mounttable mounted servers', |
| MN_MT_NODES: 'mounttable nodes' |
| }); |
| |
| /** Constants for all the keys in raw data. */ |
| var dataKeys = Object.freeze({ |
| DK_SERVICE_LATENCY: 'ServiceLatency', |
| DK_SERVICE_COUNTERS: 'ServiceCounters', |
| DK_SERVICE_QPS: 'ServiceQPS', |
| DK_SERVICE_METADATA: 'ServiceMetadata' |
| }); |
| |
| /** A map from long name strings to their shorter forms. */ |
| var displayNames = Object.freeze({ |
| 'active-connections': 'ACTIVE CONN', |
| 'application repository': 'APPS', |
| 'application repository latency': 'APPS', |
| 'applicationd': 'APPS', |
| 'benchmark service': 'BENCHMARK', |
| 'binary discharger': 'DISCHARGER', |
| 'binary discharger latency': 'DISCHARGER', |
| 'binary repository': 'BINS', |
| 'binary repository latency': 'BINS', |
| 'binaryd': 'BINS', |
| 'cpu-usage': 'CPU%', |
| 'disk-usage': 'DISK%', |
| 'groups service': 'GROUPS', |
| 'groups service latency': 'GROUPS', |
| 'healthCheckLatency': 'HEALTH LAT', |
| 'identityd': 'IDEN', |
| 'identity service': 'IDENTITY', |
| 'macaroon service': 'MACAROON', |
| 'macaroon service latency': 'MACAROON', |
| 'memory-usage': 'RAM%', |
| 'mounttable': 'MOUNTTABLE', |
| 'mounttabled': 'MTB', |
| 'mounttable latency': 'MTB', |
| 'mounttable mounted servers': 'MTB SERVERS', |
| 'mounttable nodes': 'MTB NODES', |
| 'mounttable qps': 'MTB QPS', |
| 'ping': 'PING', |
| 'proxy service': 'PROXY', |
| 'proxy service latency': 'PROXY', |
| 'proxyd': 'PROXY', |
| 'qps': 'QPS', |
| 'reading-connections': 'READING CONN', |
| 'role service': 'ROLES', |
| 'role service latency': 'ROLES', |
| 'roled': 'ROLED', |
| 'syncbase allocator': 'SB ALLOCATOR', |
| 'tcpconn': 'TCP CONN', |
| 'waiting-connections': 'WAITING CONN', |
| 'writing-connections': 'WRITING CONN' |
| }); |
| |
| /** |
| * Gets the display name of the given name string. |
| * @param {string} name. |
| */ |
| function getDisplayName(name) { |
| var displayName = displayNames[name]; |
| if (!displayName) { |
| return name; |
| } |
| return displayName; |
| } |
| |
| /** Metric names used in retrieved data. */ |
| var metricKeys = { |
| latency: [ |
| 'mounttable latency', |
| 'application repository latency', |
| 'binary repository latency', |
| 'binary discharger latency', |
| 'google identity service latency', |
| 'macaroon service latency', |
| 'groups service latency', |
| 'role service latency', |
| 'proxy service latency' |
| ], |
| stats: [ |
| 'mounttable mounted servers', |
| 'mounttable nodes', |
| 'mounttable qps' |
| ], |
| gce: [ |
| 'cpu-usage', |
| 'disk-usage', |
| 'memory-usage', |
| 'ping', |
| 'tcpconn' |
| ], |
| nginxLoad: [ |
| 'healthCheckLatency', |
| 'qps', |
| 'active-connections', |
| 'reading-connections', |
| 'writing-connections', |
| 'waiting-connections' |
| ] |
| }; |
| |
| /** Metric objects for vanadium cloud services. */ |
| var cloudServiceMetrics = [ |
| createMetric('MOUNTTABLE', 'CloudServiceLatency', metricKeys.latency[0], |
| false, false, 'V REQUEST LATENCY'), |
| createMetric('DISCHARGER', 'CloudServiceLatency', metricKeys.latency[3]), |
| createMetric('IDENTITY', 'CloudServiceLatency', metricKeys.latency[4]), |
| createMetric('MACAROON', 'CloudServiceLatency', metricKeys.latency[5]), |
| createMetric('ROLES', 'CloudServiceLatency', metricKeys.latency[7]), |
| createMetric('PROXY', 'CloudServiceLatency', metricKeys.latency[8], true), |
| createMetric('MOUNTED SERVERS', 'CloudServiceStats', metricKeys.stats[0], |
| false, false, 'V STATS'), |
| createMetric('MOUNTED NODES', 'CloudServiceStats', metricKeys.stats[1]), |
| createMetric('MTB QPS', 'CloudServiceStats', metricKeys.stats[2], true) |
| ]; |
| |
| /** Metric objects for cloud services GCE. */ |
| var cloudServiceGCEMetrics = [ |
| createMetric('CPU%', 'CloudServiceGCE', metricKeys.gce[0], |
| false, false, 'V GCE'), |
| createMetric('RAM%', 'CloudServiceGCE', metricKeys.gce[1]), |
| createMetric('DISK%', 'CloudServiceGCE', metricKeys.gce[2]), |
| createMetric('PING', 'CloudServiceGCE', metricKeys.gce[3]), |
| createMetric('TCP CONN', 'CloudServiceGCE', metricKeys.gce[4], false, true) |
| ]; |
| |
| /** Metric objects for Nginx. */ |
| var nginxMetrics = [ |
| createMetric('HEALTH LAT', 'NginxLoad', metricKeys.nginxLoad[0], |
| false, false, 'NGINX SERVER LOAD'), |
| createMetric('QPS', 'NginxLoad', metricKeys.nginxLoad[1]), |
| createMetric('ACTIVE CONN', 'NginxLoad', metricKeys.nginxLoad[1]), |
| createMetric('READING CONN', 'NginxLoad', metricKeys.nginxLoad[2]), |
| createMetric('WRITING CONN', 'NginxLoad', metricKeys.nginxLoad[3]), |
| createMetric('WAITING CONN', 'NginxLoad', metricKeys.nginxLoad[4], true) |
| ]; |
| |
| /** Metric objects for Nginx GCE. */ |
| var nginxGCEMetrics = [ |
| createMetric('CPU%', 'NginxGCE', metricKeys.gce[0], |
| false, false, 'NGINX GCE'), |
| createMetric('RAM%', 'NginxGCE', metricKeys.gce[1]), |
| createMetric('DISK%', 'NginxGCE', metricKeys.gce[2]), |
| createMetric('PING', 'NginxGCE', metricKeys.gce[3]), |
| createMetric('TCP CONN', 'NginxGCE', metricKeys.gce[4]) |
| ]; |
| |
| /** All available metric objects. */ |
| var mainMetrics = cloudServiceMetrics.concat(nginxMetrics); |
| |
| var stableDataThresholdInSeconds = 600; |
| |
| /** |
| * Creates a metric. |
| * |
| * The data loaded from the backend server looks like this: |
| * nginx-worker-4: { |
| * NginxLoad: { |
| * active-connections: {...}, |
| * qps: {...} |
| * }, |
| * NginxGCE: { |
| * cpu-usage: {...}, |
| * disk-usage: {...} |
| * }, |
| * ... |
| * } |
| * |
| * Keys like "NginxLoad" and "NginxGCE" are data keys. |
| * Keys like "active-connections" and "cpu-usage" are metric keys. |
| * |
| * @param {string} label - The display label. |
| * @param {string} dataKey - See above. |
| * @param {string} metricKey - See above. |
| * @param {boolean} addMinorDivider - Whether to add a minor divider in the |
| * data table. |
| * @param {boolean} addMajorDivider - Whether to add a major divider in the |
| * data table. |
| * @param {string} sectionLabel - The label to show above a data table section. |
| * @return {Object} |
| */ |
| function createMetric(label, dataKey, metricKey, |
| addMinorDivider, addMajorDivider, sectionLabel) { |
| return { |
| label: label, |
| dataKey: dataKey, |
| metricKey: metricKey, |
| addMinorDivider: addMinorDivider, |
| addMajorDivider: addMajorDivider, |
| sectionLabel: sectionLabel |
| }; |
| } |
| |
| module.exports = { |
| zones: zones, |
| metricNames: metricNames, |
| dataKeys: dataKeys, |
| orderedZones: [ |
| zones.US_CENTRAL1_C, |
| zones.US_CENTRAL1_A, |
| zones.US_CENTRAL1_B, |
| zones.US_CENTRAL1_F, |
| zones.EUROPE_WEST1_B, |
| zones.EUROPE_WEST1_C, |
| zones.EUROPE_WEST1_D, |
| zones.ASIA_EAST1_A, |
| zones.ASIA_EAST1_B, |
| zones.ASIA_EAST1_C |
| ], |
| getDisplayName: getDisplayName, |
| metricKeys: metricKeys, |
| cloudServiceMetrics: cloudServiceMetrics, |
| cloudServiceGCEMetrics: cloudServiceGCEMetrics, |
| nginxMetrics: nginxMetrics, |
| nginxGCEMetrics: nginxGCEMetrics, |
| mainMetrics: mainMetrics, |
| stableDataThresholdInSeconds: stableDataThresholdInSeconds |
| }; |