Remove all legacy (cardano-sl) related code.
parent
f661605ed4
commit
9ca7dc7023
@ -1,95 +0,0 @@
|
||||
pkgs: { name, nodes, config, options, resources, ... }:
|
||||
with pkgs; with lib;
|
||||
let
|
||||
inherit (iohkNix.cardanoLib) cardanoConfig;
|
||||
cfg = config.services.cardano-node-legacy;
|
||||
stateDir = "/var/lib/cardano-node";
|
||||
port = globals.cardanoNodeLegacyPort;
|
||||
command = toString ([
|
||||
cfg.executable
|
||||
"--address ${cfg.publicIp}:${toString port}"
|
||||
"--listen ${cfg.listenIp}:${toString port}"
|
||||
(optionalString cfg.jsonLog "--json-log ${stateDir}/jsonLog.json")
|
||||
(optionalString (config.services.monitoring-exporters.metrics) "--metrics +RTS -T -RTS --statsd-server 127.0.0.1:${toString config.services.monitoring-exporters.statsdPort}")
|
||||
(optionalString (cfg.nodeType == "core") "--keyfile ${stateDir}/key.sk")
|
||||
(optionalString (cfg.assetLockFile != null) "--asset-lock-file ${cfg.assetLockFile}")
|
||||
"--log-config ${cardano-node-legacy-config}/log-configs/cluster.yaml"
|
||||
"--logs-prefix /var/lib/cardano-node"
|
||||
"--db-path ${stateDir}/node-db"
|
||||
"--configuration-file ${cardanoConfig}/configuration.yaml"
|
||||
"--configuration-key ${globals.environmentConfig.confKey}"
|
||||
"--topology ${cfg.topologyYaml}"
|
||||
"--node-id ${name}"
|
||||
] ++ cfg.extraCommandArgs);
|
||||
in {
|
||||
|
||||
imports = [
|
||||
cardano-ops.modules.common-cardano-legacy
|
||||
];
|
||||
|
||||
options = {
|
||||
services.cardano-node-legacy = {
|
||||
enable = mkEnableOption "cardano-node-legacy" // { default = true; };
|
||||
|
||||
extraCommandArgs = mkOption { type = types.listOf types.str; default = []; };
|
||||
saveCoreDumps = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "automatically save coredumps when cardano-node segfaults";
|
||||
};
|
||||
|
||||
executable = mkOption {
|
||||
type = types.str;
|
||||
description = "Executable to run as the daemon.";
|
||||
default = "${cardano-node-legacy}/bin/cardano-node-simple";
|
||||
};
|
||||
autoStart = mkOption { type = types.bool; default = true; };
|
||||
jsonLog = mkOption { type = types.bool; default = false; };
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
users = {
|
||||
users.cardano-node = {
|
||||
uid = 10014;
|
||||
description = "cardano-node server user";
|
||||
group = "cardano-node";
|
||||
home = stateDir;
|
||||
createHome = true;
|
||||
extraGroups = [ "keys" ];
|
||||
};
|
||||
groups.cardano-node = {
|
||||
gid = 123123;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.cardano-node-legacy = {
|
||||
description = "cardano node legacy service";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = optionals cfg.autoStart [ "multi-user.target" ];
|
||||
script = ''
|
||||
[ -f /var/lib/keys/cardano-node ] && cp -f /var/lib/keys/cardano-node ${stateDir}/key.sk
|
||||
${optionalString (cfg.saveCoreDumps) ''
|
||||
# only a process with non-zero coresize can coredump (the default is 0)
|
||||
ulimit -c unlimited
|
||||
''}
|
||||
exec ${command}
|
||||
'';
|
||||
serviceConfig = {
|
||||
User = "cardano-node";
|
||||
Group = "cardano-node";
|
||||
# Allow a maximum of 5 retries separated by 30 seconds, in total capped by 200s
|
||||
Restart = "always";
|
||||
RestartSec = 30;
|
||||
StartLimitInterval = 200;
|
||||
StartLimitBurst = 5;
|
||||
KillSignal = "SIGINT";
|
||||
WorkingDirectory = stateDir;
|
||||
PrivateTmp = true;
|
||||
Type = "notify";
|
||||
MemoryMax = "3.5G";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -1,171 +0,0 @@
|
||||
pkgs: { config, ... }:
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
inherit (lib) mkForce mkIf mkEnableOption mkOption types;
|
||||
explorerPythonAPI = cardano-sl-pkgs.explorerPythonAPI;
|
||||
cfg = config.services.explorer-python-api;
|
||||
in {
|
||||
options = {
|
||||
services.explorer-python-api = {
|
||||
enable = mkEnableOption "Explorer Python API";
|
||||
epochSlots = mkOption {
|
||||
description = "The number of slots per epoch. 0 < EPOCHSLOTS <= 21600";
|
||||
type = types.ints.positive;
|
||||
default = 21600;
|
||||
};
|
||||
addrMaxLen = mkOption {
|
||||
description = "The maximum address length: 200 <= ADDRMAXLEN <= 8000";
|
||||
type = types.ints.positive;
|
||||
default = 200;
|
||||
};
|
||||
legacyProxyPort = mkOption {
|
||||
description = "The legacy explorer port to proxy to; typically 8100 or 8101.";
|
||||
type = types.ints.positive;
|
||||
default = 8101;
|
||||
};
|
||||
pythonApiProxyPort = mkOption {
|
||||
description = "The python explorer API port to proxy to; typically 7000.";
|
||||
type = types.ints.positive;
|
||||
default = 7000;
|
||||
};
|
||||
pythonApiMetricsPort = mkOption {
|
||||
description = "The python explorer API prometheus metrics port; typically 7001.";
|
||||
type = types.ints.positive;
|
||||
default = 7001;
|
||||
};
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
services.nginx = mkIf config.services.nginx.enable {
|
||||
virtualHosts = {
|
||||
"${globals.explorerHostName}.${globals.domain}" = mkForce {
|
||||
locations = if (globals.initialPythonExplorerDBSyncDone) then {
|
||||
# Pass to python API once the initial DB dump sync has completed
|
||||
"/api/addresses/summary/".proxyPass = "http://127.0.0.1:${toString cfg.pythonApiProxyPort}";
|
||||
} else {
|
||||
# Otherwise use the main explorer API
|
||||
"/api/addresses/summary/".proxyPass = "http://127.0.0.1:${toString cfg.legacyProxyPort}";
|
||||
};
|
||||
};
|
||||
"explorer-ip" = {
|
||||
locations = {
|
||||
"/metrics/explorer-python-api" = {
|
||||
proxyPass = "http://127.0.0.1:${toString cfg.pythonApiMetricsPort}/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ cfg.pythonApiProxyPort cfg.pythonApiMetricsPort ];
|
||||
users.users.explorer-python-api = {
|
||||
home = "/var/empty";
|
||||
isSystemUser = true;
|
||||
};
|
||||
systemd.services.explorer-python-api = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
DBSOCKPATH = config.services.cardano-postgres.postgresqlSocketPath;
|
||||
prometheus_multiproc_dir = "/tmp/explorer-python-metrics";
|
||||
ADDRMAXLEN = builtins.toString cfg.addrMaxLen;
|
||||
EXPLORERURL = "http://localhost:${toString cfg.legacyProxyPort}";
|
||||
};
|
||||
preStart = "sleep 5";
|
||||
script = "exec ${explorerPythonAPI}/bin/run-explorer-python-api";
|
||||
serviceConfig = {
|
||||
User = "explorer-python-api";
|
||||
Restart = "always";
|
||||
RestartSec = "30s";
|
||||
};
|
||||
};
|
||||
systemd.services.explorer-python-dumper = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
DBSOCKPATH = config.services.cardano-postgres.postgresqlSocketPath;
|
||||
EPOCHSLOTS = "${builtins.toString cfg.epochSlots}";
|
||||
ADDRMAXLEN = "${builtins.toString cfg.addrMaxLen}";
|
||||
EXPLORERURL = "http://localhost:${toString cfg.legacyProxyPort}";
|
||||
};
|
||||
preStart = "sleep 5";
|
||||
script = "exec ${explorerPythonAPI}/bin/run-explorer-python-dumper";
|
||||
serviceConfig = {
|
||||
User = "explorer-python-api";
|
||||
Restart = "always";
|
||||
RestartSec = "30s";
|
||||
};
|
||||
};
|
||||
services.cardano-postgres.enable = true;
|
||||
services.postgresql = {
|
||||
initialScript = pkgs.writeText "explorerPythonAPI-initScript" ''
|
||||
create database explorer_python_api;
|
||||
\connect explorer_python_api;
|
||||
create schema scraper;
|
||||
create table scraper.blocks (
|
||||
cbeBlkHash text primary key
|
||||
, cbeEpoch smallint
|
||||
, cbeSlot smallint
|
||||
, cbeBlkHeight integer
|
||||
, cbeTimeIssued timestamp without time zone
|
||||
, cbeTxNum integer
|
||||
, cbeTotalSent bigint
|
||||
, cbeSize integer
|
||||
, cbeBlockLead text
|
||||
, cbeFees bigint
|
||||
, cbsPrevHash text
|
||||
, cbsNextHash text
|
||||
, cbsMerkleRoot text
|
||||
);
|
||||
create index i_blocks_cbeBlkHash on scraper.blocks (cbeBlkHash asc);
|
||||
create table scraper.tx (
|
||||
ctsId text primary key
|
||||
, ctsTxTimeIssued timestamp without time zone
|
||||
, ctsBlockTimeIssued timestamp without time zone
|
||||
, ctsBlockHash text
|
||||
, ctsTotalInput bigint
|
||||
, ctsTotalOutput bigint
|
||||
, ctsFees bigint
|
||||
);
|
||||
create index i_tx_ctsId on scraper.tx (ctsId asc);
|
||||
create index i_tx_ctsTxTimeIssued on scraper.tx (ctsTxTimeIssued asc);
|
||||
create table scraper.txinput (
|
||||
ctsId text
|
||||
, ctsIdIndex smallint
|
||||
, ctsTxTimeIssued timestamp without time zone
|
||||
, ctsInputAddr text
|
||||
, ctsInput bigint
|
||||
, constraint pk_txinput primary key (ctsId, ctsIdIndex)
|
||||
);
|
||||
create index i_txinput_ctsId on scraper.txinput (ctsId asc);
|
||||
create index i_txinput_ctsIdIndex on scraper.txinput (ctsIdIndex asc);
|
||||
create index i_txinput_ctsTxTimeIssued on scraper.txinput (ctsTxTimeIssued asc);
|
||||
create index i_txinput_ctsInputAddr_ctsId on scraper.txinput (ctsInputAddr asc, ctsId asc);
|
||||
create table scraper.txoutput (
|
||||
ctsId text
|
||||
, ctsIdIndex smallint
|
||||
, ctsTxTimeIssued timestamp without time zone
|
||||
, ctsOutputAddr text
|
||||
, ctsOutput bigint
|
||||
, constraint pk_txoutput primary key (ctsId, ctsIdIndex)
|
||||
);
|
||||
create index i_txoutput_ctsId on scraper.txoutput (ctsId asc);
|
||||
create index i_txoutput_ctsIdIndex on scraper.txoutput (ctsIdIndex asc);
|
||||
create index i_txoutput_ctsTxTimeIssued on scraper.txoutput (ctsTxTimeIssued asc);
|
||||
create index i_txoutput_ctsOutputAddr_ctsId on scraper.txoutput (ctsOutputAddr asc, ctsId asc);
|
||||
create user explorer_python_api;
|
||||
grant all privileges on database explorer_python_api to explorer_python_api;
|
||||
grant all privileges on schema scraper to explorer_python_api;
|
||||
grant all privileges on all tables in schema scraper to explorer_python_api;
|
||||
'';
|
||||
identMap = ''
|
||||
explorer-users explorer-python-api explorer_python_api
|
||||
explorer-users root explorer_python_api
|
||||
explorer-users postgres postgres
|
||||
explorer-users cexplorer cexplorer
|
||||
explorer-users root cexplorer
|
||||
'';
|
||||
authentication = ''
|
||||
local all all ident map=explorer-users
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
pkgs: { name, nodes, config, options, resources, ... }:
|
||||
with pkgs; with lib;
|
||||
let
|
||||
cfg = config.services.cardano-node-legacy;
|
||||
port = globals.cardanoNodeLegacyPort;
|
||||
hostName = name: "${name}.cardano";
|
||||
cardanoNodes = filterAttrs
|
||||
(_: node: node.config.services.cardano-node-legacy.enable
|
||||
or node.config.services.byron-proxy.enable or false)
|
||||
nodes;
|
||||
cardanoHostList = lib.mapAttrsToList (nodeName: node: {
|
||||
name = hostName nodeName;
|
||||
ip = staticRouteIp nodeName;
|
||||
}) cardanoNodes;
|
||||
|
||||
topology = {
|
||||
nodes = mapAttrs (name: node: let nodeCfg = node.config.services.cardano-node-legacy; in {
|
||||
type = nodeCfg.nodeType;
|
||||
region = node.config.deployment.ec2.region;
|
||||
host = hostName name;
|
||||
port = port;
|
||||
kademlia = false;
|
||||
} // optionalAttrs (concatLists nodeCfg.staticRoutes != []) {
|
||||
static-routes = nodeCfg.staticRoutes;
|
||||
} // optionalAttrs (concatLists nodeCfg.dynamicSubscribe != []) {
|
||||
dynamic-subscribe = map (map (h: {
|
||||
"host" = if (nodes ? ${h}) then hostName h else h;
|
||||
})) nodeCfg.dynamicSubscribe;
|
||||
}) cardanoNodes;
|
||||
};
|
||||
|
||||
nodeName = node: head (attrNames (filterAttrs (_: n: n == node) nodes));
|
||||
|
||||
staticRouteIp = getStaticRouteIp resources nodes;
|
||||
in {
|
||||
|
||||
imports = [
|
||||
cardano-ops.modules.common
|
||||
];
|
||||
|
||||
options = {
|
||||
services.cardano-node-legacy = {
|
||||
listenIp = mkOption { type = types.str; default = getListenIp nodes.${name};};
|
||||
publicIp = mkOption { type = types.str; default = staticRouteIp name;};
|
||||
nodeType = mkOption { type = types.enum [ "core" "relay" "edge" ];};
|
||||
topologyYaml = mkOption {
|
||||
type = types.path;
|
||||
default = writeText "topology.yaml" (builtins.toJSON topology);
|
||||
};
|
||||
|
||||
staticRoutes = mkOption {
|
||||
default = [];
|
||||
type = types.listOf (types.listOf types.str);
|
||||
description = ''Static routes to peers.'';
|
||||
};
|
||||
|
||||
dynamicSubscribe = mkOption {
|
||||
default = [];
|
||||
type = types.listOf (types.listOf types.str);
|
||||
description = ''Dnymic subscribe routes.'';
|
||||
};
|
||||
|
||||
assetLockFile = mkOption { type = types.nullOr types.path; default = null; };
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
environment.systemPackages = [ pkgs.telnet ];
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [ port ];
|
||||
|
||||
# TODO: securing this depends on CSLA-27
|
||||
# NOTE: this implicitly blocks DHCPCD, which uses port 68
|
||||
allowedUDPPortRanges = [ { from = 1024; to = 65000; } ];
|
||||
};
|
||||
|
||||
services.dnsmasq = {
|
||||
enable = true;
|
||||
servers = [ "127.0.0.1" ];
|
||||
};
|
||||
|
||||
networking.extraHosts = ''
|
||||
${concatStringsSep "\n" (map (host: "${host.ip} ${host.name}") cardanoHostList)}
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,557 +0,0 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": "-- Grafana --",
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"gnetId": null,
|
||||
"graphTooltip": 0,
|
||||
"id": 7,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"aliasColors": {},
|
||||
"bars": false,
|
||||
"dashLength": 10,
|
||||
"dashes": false,
|
||||
"datasource": "prometheus",
|
||||
"fill": 1,
|
||||
"fillGradient": 0,
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 7,
|
||||
"legend": {
|
||||
"avg": false,
|
||||
"current": false,
|
||||
"max": false,
|
||||
"min": false,
|
||||
"show": true,
|
||||
"total": false,
|
||||
"values": false
|
||||
},
|
||||
"lines": true,
|
||||
"linewidth": 1,
|
||||
"links": [],
|
||||
"nullPointMode": "null",
|
||||
"options": {
|
||||
"dataLinks": []
|
||||
},
|
||||
"percentage": false,
|
||||
"pointradius": 2,
|
||||
"points": false,
|
||||
"renderer": "flot",
|
||||
"seriesOverrides": [],
|
||||
"spaceLength": 10,
|
||||
"stack": false,
|
||||
"steppedLine": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "rate(address_summary_hist_count[1h])*3600",
|
||||
"format": "time_series",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"thresholds": [],
|
||||
"timeFrom": null,
|
||||
"timeRegions": [],
|
||||
"timeShift": null,
|
||||
"title": "Explorer Python API Hit Rate (Hits per hour)",
|
||||
"tooltip": {
|
||||
"shared": true,
|
||||
"sort": 0,
|
||||
"value_type": "individual"
|
||||
},
|
||||
"type": "graph",
|
||||
"xaxis": {
|
||||
"buckets": null,
|
||||
"mode": "time",
|
||||
"name": null,
|
||||
"show": true,
|
||||
"values": []
|
||||
},
|
||||
"yaxes": [
|
||||
{
|
||||
"format": "short",
|
||||
"label": "Address API Hits/hr",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"format": "short",
|
||||
"label": null,
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"yaxis": {
|
||||
"align": false,
|
||||
"alignLevel": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"aliasColors": {},
|
||||
"bars": false,
|
||||
"dashLength": 10,
|
||||
"dashes": false,
|
||||
"datasource": "prometheus",
|
||||
"fill": 1,
|
||||
"fillGradient": 0,
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 0
|
||||
},
|
||||
"id": 6,
|
||||
"legend": {
|
||||
"avg": false,
|
||||
"current": false,
|
||||
"max": false,
|
||||
"min": false,
|
||||
"show": true,
|
||||
"total": false,
|
||||
"values": false
|
||||
},
|
||||
"lines": true,
|
||||
"linewidth": 1,
|
||||
"links": [],
|
||||
"nullPointMode": "null",
|
||||
"options": {
|
||||
"dataLinks": []
|
||||
},
|
||||
"percentage": false,
|
||||
"pointradius": 2,
|
||||
"points": false,
|
||||
"renderer": "flot",
|
||||
"seriesOverrides": [
|
||||
{
|
||||
"alias": "/.*status=\"[^2][0-9][0-9].*/",
|
||||
"yaxis": 2
|
||||
}
|
||||
],
|
||||
"spaceLength": 10,
|
||||
"stack": false,
|
||||
"steppedLine": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "address_summary_hist_sum / address_summary_hist_count",
|
||||
"format": "time_series",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"thresholds": [],
|
||||
"timeFrom": null,
|
||||
"timeRegions": [],
|
||||
"timeShift": null,
|
||||
"title": "Explorer Python API Avg Response Time (s)",
|
||||
"tooltip": {
|
||||
"shared": true,
|
||||
"sort": 0,
|
||||
"value_type": "individual"
|
||||
},
|
||||
"type": "graph",
|
||||
"xaxis": {
|
||||
"buckets": null,
|
||||
"mode": "time",
|
||||
"name": null,
|
||||
"show": true,
|
||||
"values": []
|
||||
},
|
||||
"yaxes": [
|
||||
{
|
||||
"format": "short",
|
||||
"label": "2XX Avg Response (s)",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"format": "short",
|
||||
"label": "Non-2XX Avg Response (s)",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"yaxis": {
|
||||
"align": false,
|
||||
"alignLevel": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"cards": {
|
||||
"cardPadding": null,
|
||||
"cardRound": null
|
||||
},
|
||||
"color": {
|
||||
"cardColor": "#73BF69",
|
||||
"colorScale": "sqrt",
|
||||
"colorScheme": "interpolateOranges",
|
||||
"exponent": 0.5,
|
||||
"min": null,
|
||||
"mode": "opacity"
|
||||
},
|
||||
"dataFormat": "tsbuckets",
|
||||
"datasource": "prometheus",
|
||||
"gridPos": {
|
||||
"h": 11,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 8
|
||||
},
|
||||
"heatmap": {},
|
||||
"hideZeroBuckets": false,
|
||||
"highlightCards": true,
|
||||
"id": 2,
|
||||
"interval": "",
|
||||
"legend": {
|
||||
"show": true
|
||||
},
|
||||
"links": [],
|
||||
"options": {},
|
||||
"reverseYBuckets": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(increase(address_summary_hist_bucket{status=\"200\"}[2m])) by (le)",
|
||||
"format": "heatmap",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "{{le}}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"timeFrom": null,
|
||||
"timeShift": null,
|
||||
"title": "Explorer Python API Heatmap, 2m Rolling Window, Opacity View",
|
||||
"tooltip": {
|
||||
"show": true,
|
||||
"showHistogram": false
|
||||
},
|
||||
"type": "heatmap",
|
||||
"xAxis": {
|
||||
"show": true
|
||||
},
|
||||
"xBucketNumber": null,
|
||||
"xBucketSize": null,
|
||||
"yAxis": {
|
||||
"decimals": null,
|
||||
"format": "short",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true,
|
||||
"splitFactor": null
|
||||
},
|
||||
"yBucketBound": "auto",
|
||||
"yBucketNumber": null,
|
||||
"yBucketSize": null
|
||||
},
|
||||
{
|
||||
"cards": {
|
||||
"cardPadding": null,
|
||||
"cardRound": null
|
||||
},
|
||||
"color": {
|
||||
"cardColor": "#73BF69",
|
||||
"colorScale": "sqrt",
|
||||
"colorScheme": "interpolateOranges",
|
||||
"exponent": 0.5,
|
||||
"min": null,
|
||||
"mode": "spectrum"
|
||||
},
|
||||
"dataFormat": "tsbuckets",
|
||||
"datasource": "prometheus",
|
||||
"gridPos": {
|
||||
"h": 11,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 8
|
||||
},
|
||||
"heatmap": {},
|
||||
"hideZeroBuckets": false,
|
||||
"highlightCards": true,
|
||||
"id": 3,
|
||||
"legend": {
|
||||
"show": true
|
||||
},
|
||||
"links": [],
|
||||
"options": {},
|
||||
"reverseYBuckets": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(increase(address_summary_hist_bucket{status=\"200\"}[2m])) by (le)",
|
||||
"format": "heatmap",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "{{le}}",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"timeFrom": null,
|
||||
"timeShift": null,
|
||||
"title": "Explorer Python API Heatmap, 2m Rolling Window, Spectrum View",
|
||||
"tooltip": {
|
||||
"show": true,
|
||||
"showHistogram": false
|
||||
},
|
||||
"type": "heatmap",
|
||||
"xAxis": {
|
||||
"show": true
|
||||
},
|
||||
"xBucketNumber": null,
|
||||
"xBucketSize": null,
|
||||
"yAxis": {
|
||||
"decimals": null,
|
||||
"format": "short",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true,
|
||||
"splitFactor": null
|
||||
},
|
||||
"yBucketBound": "auto",
|
||||
"yBucketNumber": null,
|
||||
"yBucketSize": null
|
||||
},
|
||||
{
|
||||
"aliasColors": {},
|
||||
"bars": false,
|
||||
"dashLength": 10,
|
||||
"dashes": false,
|
||||
"datasource": "prometheus",
|
||||
"fill": 1,
|
||||
"fillGradient": 0,
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 19
|
||||
},
|
||||
"id": 9,
|
||||
"legend": {
|
||||
"avg": false,
|
||||
"current": false,
|
||||
"max": false,
|
||||
"min": false,
|
||||
"show": true,
|
||||
"total": false,
|
||||
"values": false
|
||||
},
|
||||
"lines": true,
|
||||
"linewidth": 1,
|
||||
"links": [],
|
||||
"nullPointMode": "null",
|
||||
"options": {
|
||||
"dataLinks": []
|
||||
},
|
||||
"percentage": false,
|
||||
"pointradius": 2,
|
||||
"points": false,
|
||||
"renderer": "flot",
|
||||
"seriesOverrides": [],
|
||||
"spaceLength": 10,
|
||||
"stack": false,
|
||||
"steppedLine": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "address_summary_hist_count",
|
||||
"format": "time_series",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"thresholds": [],
|
||||
"timeFrom": null,
|
||||
"timeRegions": [],
|
||||
"timeShift": null,
|
||||
"title": "Explorer Python API Total Hit Count",
|
||||
"tooltip": {
|
||||
"shared": true,
|
||||
"sort": 0,
|
||||
"value_type": "individual"
|
||||
},
|
||||
"type": "graph",
|
||||
"xaxis": {
|
||||
"buckets": null,
|
||||
"mode": "time",
|
||||
"name": null,
|
||||
"show": true,
|
||||
"values": []
|
||||
},
|
||||
"yaxes": [
|
||||
{
|
||||
"decimals": null,
|
||||
"format": "short",
|
||||
"label": "Address API Hits",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"format": "short",
|
||||
"label": null,
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"yaxis": {
|
||||
"align": false,
|
||||
"alignLevel": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"aliasColors": {},
|
||||
"bars": false,
|
||||
"dashLength": 10,
|
||||
"dashes": false,
|
||||
"datasource": "prometheus",
|
||||
"fill": 1,
|
||||
"fillGradient": 0,
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 19
|
||||
},
|
||||
"id": 11,
|
||||
"legend": {
|
||||
"avg": false,
|
||||
"current": false,
|
||||
"max": false,
|
||||
"min": false,
|
||||
"show": true,
|
||||
"total": false,
|
||||
"values": false
|
||||
},
|
||||
"lines": true,
|
||||
"linewidth": 1,
|
||||
"links": [],
|
||||
"nullPointMode": "null",
|
||||
"options": {
|
||||
"dataLinks": []
|
||||
},
|
||||
"percentage": false,
|
||||
"pointradius": 2,
|
||||
"points": false,
|
||||
"renderer": "flot",
|
||||
"seriesOverrides": [],
|
||||
"spaceLength": 10,
|
||||
"stack": false,
|
||||
"steppedLine": false,
|
||||
"targets": [
|
||||
{
|
||||
"expr": "block_height",
|
||||
"format": "time_series",
|
||||
"intervalFactor": 1,
|
||||
"legendFormat": "",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"thresholds": [],
|
||||
"timeFrom": null,
|
||||
"timeRegions": [],
|
||||
"timeShift": null,
|
||||
"title": "Python Block Height",
|
||||
"tooltip": {
|
||||
"shared": true,
|
||||
"sort": 0,
|
||||
"value_type": "individual"
|
||||
},
|
||||
"type": "graph",
|
||||
"xaxis": {
|
||||
"buckets": null,
|
||||
"mode": "time",
|
||||
"name": null,
|
||||
"show": true,
|
||||
"values": []
|
||||
},
|
||||
"yaxes": [
|
||||
{
|
||||
"format": "short",
|
||||
"label": "Python Block Height",
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"format": "short",
|
||||
"label": null,
|
||||
"logBase": 1,
|
||||
"max": null,
|
||||
"min": null,
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"yaxis": {
|
||||
"align": false,
|
||||
"alignLevel": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"refresh": "15m",
|
||||
"schemaVersion": 20,
|
||||
"style": "dark",
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-1h",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {
|
||||
"refresh_intervals": [
|
||||
"5s",
|
||||
"10s",
|
||||
"30s",
|
||||
"1m",
|
||||
"5m",
|
||||
"15m",
|
||||
"30m",
|
||||
"1h",
|
||||
"2h",
|
||||
"1d"
|
||||
],
|
||||
"time_options": [
|
||||
"5m",
|
||||
"15m",
|
||||
"1h",
|
||||
"6h",
|
||||
"12h",
|
||||
"24h",
|
||||
"2d",
|
||||
"7d",
|
||||
"30d"
|
||||
]
|
||||
},
|
||||
"timezone": "",
|
||||
"title": "Explorer Python API",
|
||||
"uid": "bSVCvsvZk",
|
||||
"version": 6
|
||||
}
|
@ -1,22 +1,13 @@
|
||||
self: super:
|
||||
< |