db4e 0.44.2__tar.gz → 0.45.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {db4e-0.44.2 → db4e-0.45.0}/PKG-INFO +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DDef.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DField.py +3 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DLabel.py +4 -2
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DMethod.py +2 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DPane.py +2 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DSelect.py +13 -5
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/DeplMgr.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/InstallMgr.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/MessageRouter.py +37 -35
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/MiningDb.py +9 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/MiningETL.py +96 -40
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/OpsMgr.py +36 -26
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/P2Pool.py +2 -2
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/PaneCatalogue.py +6 -4
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/XMRig.py +2 -2
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/ChainBlocksFoundPane.py +0 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/Db4EPane.py +3 -3
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/P2PoolHashratesPane.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/P2PoolPane.py +25 -16
- db4e-0.45.0/db4e/Panes/P2PoolSharesFoundPane.bar.py +138 -0
- db4e-0.45.0/db4e/Panes/P2PoolSharesFoundPane.py +80 -0
- db4e-0.45.0/db4e/Panes/P2PoolSharesFoundPane.stacked.py +115 -0
- db4e-0.44.2/db4e/Panes/UptimePane.py → db4e-0.45.0/db4e/Panes/RuntimePane.py +25 -7
- db4e-0.44.2/db4e/Panes/RuntimeLogPane.py → db4e-0.45.0/db4e/Panes/StartStopLogPane.py +2 -2
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/XMRigHashratesPane.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/XMRigRemotePane.py +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/NavPane.py +5 -5
- {db4e-0.44.2 → db4e-0.45.0}/db4e/data_migration.py +17 -1
- {db4e-0.44.2 → db4e-0.45.0}/pyproject.toml +1 -1
- {db4e-0.44.2 → db4e-0.45.0}/LICENSE +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/README.md +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/App.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DButton.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DDebug.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DDir.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DElem.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DFile.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DForm.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DJob.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DMining.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DModule.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DMongo.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DOps.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DPlaceholder.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DStatus.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/DSystemD.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Constants/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Db4E.tcss +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Messages/Db4eMsg.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Messages/Quit.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Messages/RefreshNavPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Messages/UpdateTopBar.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Messages/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Components.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/ConfigMgr.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/ConstGroup.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Db4E.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Db4ELogger.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Db4ESystemD.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/DbCache.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/DbMgr.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/DeplClient.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/HealthCache.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/HealthMgr.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Helper.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/InternalP2Pool.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/Job.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/JobQueue.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/LocalSoftwareSystem.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/MoneroD.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/MoneroDRemote.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/OpsDb.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/P2PoolRemote.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/P2PoolWatcher.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/PaneMgr.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/SoftwareSystem.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/XMRigRemote.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Modules/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/ChainHashratesPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/ChainPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/DonationsPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/InitialSetupPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/LogViewPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/MoneroDPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/MoneroDRemotePane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/P2PoolRemotePane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/ResultsPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/TUILogPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/WelcomePane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/XMRigPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Panes/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/db4e/conf/db4e-logrotate.conf +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/db4e/systemd/db4e.service +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/monerod-0.18.4.2/bin/monerod +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/monerod-0.18.4.2/bin/start-monerod.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/monerod-0.18.4.2/conf/monerod.ini +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/monerod-0.18.4.2/systemd/monerod@.service +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/monerod-0.18.4.2/systemd/monerod@.socket +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/bin/p2pool +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/bin/start-p2pool.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/conf/p2pool-logrotate.conf +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/conf/p2pool.ini +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/docs/LICENSE +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/docs/README.md +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/systemd/p2pool@.service +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/p2pool-4.11/systemd/p2pool@.socket +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/xmrig-6.24.0/bin/xmrig +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/xmrig-6.24.0/conf/config.json +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/xmrig-6.24.0/conf/xmrig-logrotate.conf +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Templates/xmrig-6.24.0/systemd/xmrig@.service +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/BarChart.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/Clock.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/DetailPane.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/HashratePlot.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/TopBar.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/Widgets/__init__.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/bin/db4e-backup.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/bin/db4e-initial-setup.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/bin/db4e-install-service.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/bin/db4e-metrics.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/bin/db4e-uninstall-service.sh +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/enable_mre.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/server.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/test_barchart.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/test_etl.py +0 -0
- {db4e-0.44.2 → db4e-0.45.0}/db4e/test_plot.py +0 -0
|
@@ -37,7 +37,7 @@ class DDef(ConstGroup):
|
|
|
37
37
|
DB4E_SERVICE_FILE : str = "db4e.service"
|
|
38
38
|
DB4E_START_SCRIPT : str = "db4e-server"
|
|
39
39
|
DB4E_UNINSTALL_SCRIPT : str = "db4e-uninstall-service.sh"
|
|
40
|
-
DB4E_VERSION : str = "0.
|
|
40
|
+
DB4E_VERSION : str = "0.45.0"
|
|
41
41
|
DEPL_COLLECTION : str = "depl"
|
|
42
42
|
DEV_DIR : str = "dev"
|
|
43
43
|
DONATION_WALLET : str = "48aTDJfRH2JLcKW2fz4m9HJeLLVK5rMo1bKiNHFc43Ht2e2kPVh2tmk3Md7npz1WsSU7bpgtX2Xnf59RHCLUEaHfQHwao4j"
|
|
@@ -61,6 +61,7 @@ class DField(ConstGroup) :
|
|
|
61
61
|
JOB : str = "job"
|
|
62
62
|
JOBS : str = "jobs"
|
|
63
63
|
LABEL : str = "label"
|
|
64
|
+
LABELS : str = "labels"
|
|
64
65
|
LEVEL : str = "level"
|
|
65
66
|
LOCAL : str = "local"
|
|
66
67
|
LOCAL_TIMESTAMP : str = "local_timestamp"
|
|
@@ -128,6 +129,7 @@ class DField(ConstGroup) :
|
|
|
128
129
|
RESET_DATA : str = "reset_data"
|
|
129
130
|
RESULTS : str = "results"
|
|
130
131
|
RETRY_TIMEOUT : str = "retry_timeout"
|
|
132
|
+
RIGHT : str = "right"
|
|
131
133
|
RUN_BACKUP : str = "run_backup"
|
|
132
134
|
RPC_BIND_PORT : str = "rpc_bind_port"
|
|
133
135
|
RUNTIME_LOG : str = "runtime_log"
|
|
@@ -137,6 +139,7 @@ class DField(ConstGroup) :
|
|
|
137
139
|
SET_PANE : str = "set_pane"
|
|
138
140
|
SOCKET_FILE : str = "socket_file"
|
|
139
141
|
START : str = "start"
|
|
142
|
+
START_STOP_LOG : str = "start_stop_log"
|
|
140
143
|
STARTING : str = "starting"
|
|
141
144
|
STATS_MOD : str = "stats_mod"
|
|
142
145
|
STOP : str = "stop"
|
|
@@ -21,12 +21,13 @@ class DLabel(ConstGroup):
|
|
|
21
21
|
API : str = "API"
|
|
22
22
|
BLOCKCHAIN : str = "Blockchain"
|
|
23
23
|
BLOCKCHAIN_DIR : str = "Blockchain Directory"
|
|
24
|
+
BLOCKS : str = "Blocks"
|
|
24
25
|
BLOCKS_FOUND : str = "Blocks Found"
|
|
25
26
|
CHAIN : str = "Chain"
|
|
26
27
|
CHAIN_STATS : str = "Chain Stats"
|
|
27
28
|
CONFIG : str = "Configuration"
|
|
28
29
|
CONFIG_FILE : str = "Configuration File"
|
|
29
|
-
|
|
30
|
+
CURRENT : str = "Current"
|
|
30
31
|
DAYS : str = "Days"
|
|
31
32
|
DB4E : str = "Db4E Core"
|
|
32
33
|
DB4E_LONG : str = "Database 4 Everything"
|
|
@@ -111,6 +112,7 @@ class DLabel(ConstGroup):
|
|
|
111
112
|
SHOW_TIME_STATS : str = "Show Time Stats"
|
|
112
113
|
SOFTWARE_SYSTEM : str = "Software System"
|
|
113
114
|
START : str = "Start"
|
|
115
|
+
START_STOP_LOG : str = "Start/Stop Log"
|
|
114
116
|
STATUS : str = "Status"
|
|
115
117
|
STARTUP_SCRIPT : str = "Startup Script"
|
|
116
118
|
STATS_MOD : str = "API stats_mod"
|
|
@@ -118,7 +120,7 @@ class DLabel(ConstGroup):
|
|
|
118
120
|
STOP : str = "Stop"
|
|
119
121
|
STRATUM_PORT : str = "Stratum Port"
|
|
120
122
|
TIMESTAMP : str = "Timestamp"
|
|
121
|
-
|
|
123
|
+
TOTAL : str = "Total"
|
|
122
124
|
TUI_LOG : str = "Console Log"
|
|
123
125
|
TYPE : str = "Type"
|
|
124
126
|
UPDATE : str = "Update"
|
|
@@ -22,6 +22,7 @@ class DMethod(ConstGroup):
|
|
|
22
22
|
GET_DEPL : str = "get_deployment"
|
|
23
23
|
GET_TUI_LOG : str = "get_tui_log"
|
|
24
24
|
GET_RUNTIME_LOG : str = "get_runtime_log"
|
|
25
|
+
GET_START_STOP_LOG : str = "get_start_stop_log"
|
|
25
26
|
GET_UPTIME : str = "get_uptime"
|
|
26
27
|
HASHRATES : str = "hashrates"
|
|
27
28
|
INITIAL_SETUP : str = "initial_setup"
|
|
@@ -33,5 +34,6 @@ class DMethod(ConstGroup):
|
|
|
33
34
|
SET_DONATIONS : str = "set_donations"
|
|
34
35
|
SET_PANE : str = DField.SET_PANE
|
|
35
36
|
SET_PRIMARY : str = "set_primary"
|
|
37
|
+
SHARES_FOUND : str = "shares_found"
|
|
36
38
|
UPDATE_DEPLOYMENT : str = "update_deployment"
|
|
37
39
|
RUNTIME : str = "runtime"
|
|
@@ -27,10 +27,11 @@ class DPane(ConstGroup):
|
|
|
27
27
|
P2POOL_ANALYTICS: str = "P2PoolAnalyticsPane"
|
|
28
28
|
P2POOL_HASHRATES: str = "P2PoolHashratesPane"
|
|
29
29
|
P2POOL_REMOTE: str = "P2PoolRemotePane"
|
|
30
|
+
P2POOL_SHARES_FOUND: str = "P2PoolSharesFoundPane"
|
|
30
31
|
RESULTS: str = "ResultsPane"
|
|
31
32
|
RUNTIME_LOG: str = "RuntimeLogPane"
|
|
32
33
|
TUI_LOG: str = "TuiLogPane"
|
|
33
|
-
|
|
34
|
+
START_STOP_LOG: str = "StartStopLogPane"
|
|
34
35
|
WELCOME: str = "WelcomePane"
|
|
35
36
|
XMRIG: str = "XMRigPane"
|
|
36
37
|
XMRIG_HASHRATES: str = "XMRigHashratesPane"
|
|
@@ -11,13 +11,21 @@ db4e/Constants/DSelect.py
|
|
|
11
11
|
from db4e.Constants.DLabel import DLabel
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
WEEKS_1 = 7
|
|
15
|
-
WEEKS_2 = 14
|
|
16
|
-
MONTHS_1 = 30
|
|
17
|
-
MONTHS_3 = 30 *
|
|
18
|
-
MONTHS_6 = 30 *
|
|
14
|
+
WEEKS_1 = 7
|
|
15
|
+
WEEKS_2 = 14
|
|
16
|
+
MONTHS_1 = 30
|
|
17
|
+
MONTHS_3 = 30 * 3
|
|
18
|
+
MONTHS_6 = 30 * 6
|
|
19
19
|
|
|
20
20
|
class DSelect:
|
|
21
|
+
HOURS_SELECT_LIST = [
|
|
22
|
+
(DLabel.WEEK_1, WEEKS_1 * 24),
|
|
23
|
+
(DLabel.WEEKS_2, WEEKS_2 * 24),
|
|
24
|
+
(DLabel.MONTH_1, MONTHS_1 * 24),
|
|
25
|
+
(DLabel.MONTHS_3, MONTHS_3 * 24),
|
|
26
|
+
(DLabel.MONTHS_6, MONTHS_6 * 24),
|
|
27
|
+
(DLabel.ALL_TIME, -1)
|
|
28
|
+
]
|
|
21
29
|
SELECT_LIST = [
|
|
22
30
|
(DLabel.WEEK_1, WEEKS_1),
|
|
23
31
|
(DLabel.WEEKS_2, WEEKS_2),
|
|
@@ -494,7 +494,7 @@ class DeplMgr:
|
|
|
494
494
|
|
|
495
495
|
elif aDir == DDir.LOGROTATE:
|
|
496
496
|
vendor_dir = self.get_dir(DDir.VENDOR)
|
|
497
|
-
return os.path.abspath(os.path.join(vendor_dir,
|
|
497
|
+
return os.path.abspath(os.path.join(vendor_dir, DDir.LOGROTATE))
|
|
498
498
|
|
|
499
499
|
elif aDir == DElem.MONEROD:
|
|
500
500
|
return DElem.MONEROD + '-' + Default.MONEROD_VERSION
|
|
@@ -380,7 +380,7 @@ class InstallMgr(Container):
|
|
|
380
380
|
logrotate_tmpl = self.depl_mgr.get_logrotate_template(DElem.DB4E)
|
|
381
381
|
vendor_dir = db4e.vendor_dir()
|
|
382
382
|
fq_config = os.path.join(
|
|
383
|
-
vendor_dir,
|
|
383
|
+
vendor_dir, DDef.LOG_ROTATE, DElem.DB4E + DDef.CONF_SUFFIX)
|
|
384
384
|
|
|
385
385
|
# Populate the config template
|
|
386
386
|
placeholders = {
|
|
@@ -36,6 +36,8 @@ class MessageRouter:
|
|
|
36
36
|
|
|
37
37
|
def load_routes(self):
|
|
38
38
|
# Db4e core
|
|
39
|
+
self.register(DModule.OPS_MGR, DMethod.GET_RUNTIME_LOG, DElem.DB4E,
|
|
40
|
+
self.ops_mgr.get_runtime_log, DPane.RUNTIME_LOG)
|
|
39
41
|
self.register(DModule.INSTALL_MGR, DMethod.INITIAL_SETUP_PROCEED, DElem.DB4E,
|
|
40
42
|
self.install_mgr.initial_setup_proceed, DPane.INITIAL_SETUP)
|
|
41
43
|
self.register(DModule.INSTALL_MGR, DMethod.INITIAL_SETUP, DElem.DB4E,
|
|
@@ -44,67 +46,67 @@ class MessageRouter:
|
|
|
44
46
|
self.ops_mgr.get_deployment, DPane.DB4E)
|
|
45
47
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.DB4E,
|
|
46
48
|
self.depl_client.update_deployment, DPane.WELCOME)
|
|
47
|
-
self.register(DModule.OPS_MGR, DMethod.GET_UPTIME, DElem.DB4E,
|
|
48
|
-
self.ops_mgr.get_uptime, DPane.UPTIME)
|
|
49
49
|
|
|
50
50
|
# MoneroD - local
|
|
51
|
-
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.MONEROD,
|
|
52
|
-
self.ops_mgr.get_new, DPane.MONEROD)
|
|
53
51
|
self.register(DModule.OPS_MGR, DMethod.ADD_DEPLOYMENT, DElem.MONEROD,
|
|
54
52
|
self.ops_mgr.add_deployment, DPane.WELCOME)
|
|
55
|
-
self.register(DModule.
|
|
56
|
-
self.
|
|
53
|
+
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.MONEROD,
|
|
54
|
+
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
57
55
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DISABLE_DEPLOYMENT, DElem.MONEROD,
|
|
58
56
|
self.depl_client.disable_deployment, DPane.WELCOME)
|
|
59
57
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.ENABLE_DEPLOYMENT, DElem.MONEROD,
|
|
60
58
|
self.depl_client.enable_deployment, DPane.WELCOME)
|
|
59
|
+
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.MONEROD,
|
|
60
|
+
self.ops_mgr.get_deployment, DPane.MONEROD)
|
|
61
|
+
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.MONEROD,
|
|
62
|
+
self.ops_mgr.get_new, DPane.MONEROD)
|
|
61
63
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.MONEROD,
|
|
62
64
|
self.depl_client.update_deployment, DPane.WELCOME)
|
|
63
|
-
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.MONEROD,
|
|
64
|
-
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
65
65
|
|
|
66
66
|
# MoneroD - remote
|
|
67
|
-
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.MONEROD_REMOTE,
|
|
68
|
-
self.ops_mgr.get_new, DPane.MONEROD_REMOTE)
|
|
69
67
|
self.register(DModule.OPS_MGR, DMethod.ADD_DEPLOYMENT, DElem.MONEROD_REMOTE,
|
|
70
68
|
self.ops_mgr.add_deployment, DPane.WELCOME)
|
|
71
69
|
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.MONEROD_REMOTE,
|
|
72
70
|
self.ops_mgr.get_deployment, DPane.MONEROD_REMOTE)
|
|
73
|
-
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.MONEROD_REMOTE,
|
|
74
|
-
self.depl_client.update_deployment, DPane.WELCOME)
|
|
75
71
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.MONEROD_REMOTE,
|
|
76
72
|
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
73
|
+
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.MONEROD_REMOTE,
|
|
74
|
+
self.ops_mgr.get_new, DPane.MONEROD_REMOTE)
|
|
75
|
+
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.MONEROD_REMOTE,
|
|
76
|
+
self.depl_client.update_deployment, DPane.WELCOME)
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
# P2Pool - Local
|
|
80
|
-
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.P2POOL,
|
|
81
|
-
self.ops_mgr.get_new, DPane.P2POOL)
|
|
82
80
|
self.register(DModule.OPS_MGR, DMethod.ADD_DEPLOYMENT, DElem.P2POOL,
|
|
83
81
|
self.ops_mgr.add_deployment, DPane.WELCOME)
|
|
84
|
-
self.register(DModule.
|
|
85
|
-
self.
|
|
86
|
-
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.P2POOL,
|
|
87
|
-
self.ops_mgr.get_deployment, DPane.P2POOL)
|
|
82
|
+
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.P2POOL,
|
|
83
|
+
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
88
84
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DISABLE_DEPLOYMENT, DElem.P2POOL,
|
|
89
85
|
self.depl_client.disable_deployment, DPane.WELCOME)
|
|
90
86
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.ENABLE_DEPLOYMENT, DElem.P2POOL,
|
|
91
87
|
self.depl_client.enable_deployment, DPane.WELCOME)
|
|
88
|
+
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.P2POOL,
|
|
89
|
+
self.ops_mgr.get_deployment, DPane.P2POOL)
|
|
90
|
+
self.register(DModule.OPS_MGR, DMethod.HASHRATES, DElem.P2POOL,
|
|
91
|
+
self.ops_mgr.hashrates, DPane.P2POOL_HASHRATES)
|
|
92
|
+
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.P2POOL,
|
|
93
|
+
self.ops_mgr.get_new, DPane.P2POOL)
|
|
94
|
+
self.register(DModule.OPS_MGR, DMethod.SHARES_FOUND, DElem.P2POOL,
|
|
95
|
+
self.ops_mgr.shares_found, DPane.P2POOL_SHARES_FOUND)
|
|
92
96
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.P2POOL,
|
|
93
97
|
self.depl_client.update_deployment, DPane.WELCOME)
|
|
94
|
-
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.P2POOL,
|
|
95
|
-
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
96
98
|
|
|
97
99
|
# P2Pool - Remote
|
|
98
|
-
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.P2POOL_REMOTE,
|
|
99
|
-
self.ops_mgr.get_new, DPane.P2POOL_REMOTE)
|
|
100
100
|
self.register(DModule.OPS_MGR, DMethod.ADD_DEPLOYMENT, DElem.P2POOL_REMOTE,
|
|
101
101
|
self.ops_mgr.add_deployment, DPane.WELCOME)
|
|
102
|
+
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.P2POOL_REMOTE,
|
|
103
|
+
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
102
104
|
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.P2POOL_REMOTE,
|
|
103
105
|
self.ops_mgr.get_deployment, DPane.P2POOL_REMOTE)
|
|
106
|
+
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.P2POOL_REMOTE,
|
|
107
|
+
self.ops_mgr.get_new, DPane.P2POOL_REMOTE)
|
|
104
108
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.P2POOL_REMOTE,
|
|
105
109
|
self.depl_client.update_deployment, DPane.WELCOME)
|
|
106
|
-
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.P2POOL_REMOTE,
|
|
107
|
-
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
108
110
|
|
|
109
111
|
# P2Pool - Internal
|
|
110
112
|
self.register(DModule.OPS_MGR, DMethod.BLOCKS_FOUND, DElem.INT_P2POOL,
|
|
@@ -115,22 +117,22 @@ class MessageRouter:
|
|
|
115
117
|
self.ops_mgr.hashrates, DPane.CHAIN_HASHRATES)
|
|
116
118
|
|
|
117
119
|
# XMRig
|
|
118
|
-
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.XMRIG,
|
|
119
|
-
self.ops_mgr.get_new, DPane.XMRIG)
|
|
120
120
|
self.register(DModule.OPS_MGR, DMethod.ADD_DEPLOYMENT, DElem.XMRIG,
|
|
121
121
|
self.ops_mgr.add_deployment, DPane.WELCOME)
|
|
122
|
-
self.register(DModule.
|
|
123
|
-
self.
|
|
124
|
-
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.XMRIG,
|
|
125
|
-
self.ops_mgr.get_deployment, DPane.XMRIG)
|
|
122
|
+
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.XMRIG,
|
|
123
|
+
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
126
124
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DISABLE_DEPLOYMENT, DElem.XMRIG,
|
|
127
125
|
self.depl_client.disable_deployment, DPane.WELCOME)
|
|
128
126
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.ENABLE_DEPLOYMENT, DElem.XMRIG,
|
|
129
127
|
self.depl_client.enable_deployment, DPane.WELCOME)
|
|
128
|
+
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.XMRIG,
|
|
129
|
+
self.ops_mgr.get_deployment, DPane.XMRIG)
|
|
130
|
+
self.register(DModule.OPS_MGR, DMethod.GET_NEW, DElem.XMRIG,
|
|
131
|
+
self.ops_mgr.get_new, DPane.XMRIG)
|
|
132
|
+
self.register(DModule.OPS_MGR, DMethod.HASHRATES, DElem.XMRIG,
|
|
133
|
+
self.ops_mgr.hashrates, DPane.XMRIG_HASHRATES)
|
|
130
134
|
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.UPDATE_DEPLOYMENT, DElem.XMRIG,
|
|
131
135
|
self.depl_client.update_deployment, DPane.WELCOME)
|
|
132
|
-
self.register(DModule.DEPLOYMENT_CLIENT, DMethod.DELETE_DEPLOYMENT, DElem.XMRIG,
|
|
133
|
-
self.depl_client.delete_deployment, DPane.WELCOME)
|
|
134
136
|
|
|
135
137
|
# XMRig Remote
|
|
136
138
|
self.register(DModule.OPS_MGR, DMethod.GET_DEPL, DElem.XMRIG_REMOTE,
|
|
@@ -150,9 +152,9 @@ class MessageRouter:
|
|
|
150
152
|
self.register(DModule.OPS_MGR, DMethod.GET_TUI_LOG, DField.TUI_LOG,
|
|
151
153
|
self.ops_mgr.get_tui_log, DPane.TUI_LOG)
|
|
152
154
|
|
|
153
|
-
#
|
|
154
|
-
self.register(DModule.OPS_MGR, DMethod.
|
|
155
|
-
self.ops_mgr.
|
|
155
|
+
# Start/Stop Log
|
|
156
|
+
self.register(DModule.OPS_MGR, DMethod.GET_START_STOP_LOG, DField.START_STOP_LOG,
|
|
157
|
+
self.ops_mgr.get_start_stop_log, DPane.START_STOP_LOG)
|
|
156
158
|
|
|
157
159
|
# Donations
|
|
158
160
|
self.register(DModule.OPS_MGR, DMethod.SET_DONATIONS, DField.DONATIONS,
|
|
@@ -347,9 +347,10 @@ class MiningDb():
|
|
|
347
347
|
|
|
348
348
|
|
|
349
349
|
def get_block_found_events(self, instance):
|
|
350
|
+
print(f"MiningDb:get_block_found_events(): {instance}")
|
|
350
351
|
return self.db.find_many(
|
|
351
352
|
self.mining_col,
|
|
352
|
-
{ DMongo.DOC_TYPE: DMining.BLOCK_FOUND_EVENT, DMongo.
|
|
353
|
+
{ DMongo.DOC_TYPE: DMining.BLOCK_FOUND_EVENT, DMongo.POOL: instance },
|
|
353
354
|
{ DMongo.TIMESTAMP: 1 })
|
|
354
355
|
|
|
355
356
|
|
|
@@ -397,6 +398,13 @@ class MiningDb():
|
|
|
397
398
|
{ DMongo.TIMESTAMP: 1 })
|
|
398
399
|
|
|
399
400
|
|
|
401
|
+
def get_share_found_events(self, pool):
|
|
402
|
+
return self.db.find_many(
|
|
403
|
+
self.mining_col,
|
|
404
|
+
{ DMongo.DOC_TYPE: DMining.SHARE_FOUND_EVENT, DMongo.POOL: pool },
|
|
405
|
+
{ DMongo.TIMESTAMP: 1 })
|
|
406
|
+
|
|
407
|
+
|
|
400
408
|
def get_xmrigs_remote(self):
|
|
401
409
|
recs = self.db.find_many(self.mining_col, {
|
|
402
410
|
DMongo.DOC_TYPE: DMining.RT_MINER_HASHRATE})
|
|
@@ -29,45 +29,7 @@ class MiningETL:
|
|
|
29
29
|
|
|
30
30
|
def get_block_found_events(self, instance):
|
|
31
31
|
recs = self.mining_db.get_block_found_events(instance)
|
|
32
|
-
|
|
33
|
-
return {DField.DAYS: [], DField.VALUES: []}
|
|
34
|
-
|
|
35
|
-
results = {}
|
|
36
|
-
|
|
37
|
-
cur_day = recs[0][DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
38
|
-
|
|
39
|
-
for rec in recs:
|
|
40
|
-
rec_day = rec[DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
41
|
-
|
|
42
|
-
# Fill in all missing days with 0
|
|
43
|
-
while cur_day < rec_day:
|
|
44
|
-
if cur_day not in results:
|
|
45
|
-
results[cur_day] = 0
|
|
46
|
-
cur_day += timedelta(days=1)
|
|
47
|
-
|
|
48
|
-
# Count the block for this day
|
|
49
|
-
results[rec_day] = results.get(rec_day, 0) + 1
|
|
50
|
-
cur_day = rec_day
|
|
51
|
-
|
|
52
|
-
# Convert dict → lists (sorted by day)
|
|
53
|
-
times = [day.strftime("%Y-%m-%d %H:%M") for day in sorted(results.keys())]
|
|
54
|
-
values = [results[day] for day in sorted(results.keys())]
|
|
55
|
-
|
|
56
|
-
# Replace datetime days with integers for plotting
|
|
57
|
-
new_times = range(- len(times), 0, 1)
|
|
58
|
-
|
|
59
|
-
new_values = []
|
|
60
|
-
for value in values:
|
|
61
|
-
new_values.append(float(value))
|
|
62
|
-
|
|
63
|
-
first_day = - len(new_times)
|
|
64
|
-
new_days = list(range(first_day, 0, 1))
|
|
65
|
-
|
|
66
|
-
print(f"days: {new_days}\n{new_values}")
|
|
67
|
-
return {
|
|
68
|
-
DField.DAYS: new_days,
|
|
69
|
-
DField.VALUES: new_values,
|
|
70
|
-
}
|
|
32
|
+
return self.get_found_events(recs)
|
|
71
33
|
|
|
72
34
|
|
|
73
35
|
def get_chain_hashrate(self, instance):
|
|
@@ -125,6 +87,48 @@ class MiningETL:
|
|
|
125
87
|
return self.get_hashrates(recs)
|
|
126
88
|
|
|
127
89
|
|
|
90
|
+
def get_found_events(self, recs):
|
|
91
|
+
if not recs:
|
|
92
|
+
return {DField.DAYS: [], DField.VALUES: []}
|
|
93
|
+
|
|
94
|
+
results = {}
|
|
95
|
+
|
|
96
|
+
cur_day = recs[0][DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
97
|
+
|
|
98
|
+
for rec in recs:
|
|
99
|
+
rec_day = rec[DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
100
|
+
|
|
101
|
+
# Fill in all missing days with 0
|
|
102
|
+
while cur_day < rec_day:
|
|
103
|
+
if cur_day not in results:
|
|
104
|
+
results[cur_day] = 0
|
|
105
|
+
cur_day += timedelta(days=1)
|
|
106
|
+
|
|
107
|
+
# Count the block for this day
|
|
108
|
+
results[rec_day] = results.get(rec_day, 0) + 1
|
|
109
|
+
cur_day = rec_day
|
|
110
|
+
|
|
111
|
+
# Convert dict → lists (sorted by day)
|
|
112
|
+
times = [day.strftime("%Y-%m-%d %H:%M") for day in sorted(results.keys())]
|
|
113
|
+
values = [results[day] for day in sorted(results.keys())]
|
|
114
|
+
|
|
115
|
+
# Replace datetime days with integers for plotting
|
|
116
|
+
new_times = range(- len(times), 0, 1)
|
|
117
|
+
|
|
118
|
+
new_values = []
|
|
119
|
+
for value in values:
|
|
120
|
+
new_values.append(float(value))
|
|
121
|
+
|
|
122
|
+
first_day = - len(new_times)
|
|
123
|
+
new_days = list(range(first_day, 0, 1))
|
|
124
|
+
|
|
125
|
+
print(f"days: {new_days}\n{new_values}")
|
|
126
|
+
return {
|
|
127
|
+
DField.DAYS: new_days,
|
|
128
|
+
DField.VALUES: new_values,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
128
132
|
def get_hashrates(self, recs):
|
|
129
133
|
if not recs:
|
|
130
134
|
return {DField.VALUES: [], DField.DAYS: [], DField.UNITS: ""}
|
|
@@ -190,4 +194,56 @@ class MiningETL:
|
|
|
190
194
|
if rec:
|
|
191
195
|
return rec[DMongo.TIMESTAMP]
|
|
192
196
|
return None
|
|
193
|
-
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def get_share_found_events(self, pool):
|
|
200
|
+
recs = self.mining_db.get_share_found_events(pool)
|
|
201
|
+
return self.get_found_events(recs)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def get_share_found_events_stacked(self, pool):
|
|
205
|
+
recs = self.mining_db.get_share_found_events(pool)
|
|
206
|
+
if not recs:
|
|
207
|
+
return {DField.DAYS: [], DField.VALUES: [], DField.MINERS: []}
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
results = {}
|
|
211
|
+
miner_set = set()
|
|
212
|
+
|
|
213
|
+
cur_day = recs[0][DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
214
|
+
|
|
215
|
+
for rec in recs:
|
|
216
|
+
rec_day = rec[DMongo.TIMESTAMP].replace(hour=0, minute=0, second=0, microsecond=0)
|
|
217
|
+
|
|
218
|
+
# Fill in all missing days with 0
|
|
219
|
+
while cur_day < rec_day:
|
|
220
|
+
results.setdefault(cur_day, {})
|
|
221
|
+
cur_day += timedelta(days=1)
|
|
222
|
+
|
|
223
|
+
# Get the miner name
|
|
224
|
+
miner = rec[DMining.MINER]
|
|
225
|
+
miner_set.add(miner)
|
|
226
|
+
|
|
227
|
+
# Count the share found for this day
|
|
228
|
+
results.setdefault(rec_day, {})
|
|
229
|
+
results[rec_day][miner] = results[rec_day].get(miner, 0) + 1
|
|
230
|
+
|
|
231
|
+
cur_day = rec_day
|
|
232
|
+
|
|
233
|
+
miners = sorted(miner_set)
|
|
234
|
+
miner_lists = {miner: [] for miner in miners}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
for day in results:
|
|
238
|
+
for miner in miners:
|
|
239
|
+
miner_lists[miner].append(results[day].get(miner, 0))
|
|
240
|
+
|
|
241
|
+
new_days = range(- len(results), 0, 1)
|
|
242
|
+
|
|
243
|
+
final_results = {
|
|
244
|
+
DField.DAYS: list(new_days),
|
|
245
|
+
DField.VALUES: list(miner_lists.values()),
|
|
246
|
+
DField.MINERS: list(miner_set)
|
|
247
|
+
}
|
|
248
|
+
print(final_results)
|
|
249
|
+
return final_results
|
|
@@ -61,33 +61,14 @@ class OpsMgr:
|
|
|
61
61
|
def blocks_found(self, form_data: dict):
|
|
62
62
|
elem = form_data[DField.ELEMENT]
|
|
63
63
|
if type(elem == InternalP2Pool):
|
|
64
|
-
elem.blocks_found(self.mining_etl.get_block_found_events(instance=elem.instance()))
|
|
64
|
+
#elem.blocks_found(self.mining_etl.get_block_found_events(instance=elem.instance()))
|
|
65
|
+
res = self.mining_etl.get_block_found_events(instance=elem.instance())
|
|
66
|
+
elem.blocks_found(res)
|
|
67
|
+
print(f"OpsMgr:blocks_found() {res}")
|
|
68
|
+
|
|
65
69
|
return elem
|
|
66
70
|
|
|
67
71
|
|
|
68
|
-
def hashrates(self, form_data: dict):
|
|
69
|
-
elem = form_data[DField.ELEMENT]
|
|
70
|
-
|
|
71
|
-
if type(elem) == P2Pool:
|
|
72
|
-
elem.hashrate(self.mining_etl.get_pool_hashrate(instance=elem.instance()))
|
|
73
|
-
elem.hashrates(self.mining_etl.get_pool_hashrates(instance=elem.instance()))
|
|
74
|
-
|
|
75
|
-
if type(elem) == InternalP2Pool:
|
|
76
|
-
elem.hashrate(self.mining_etl.get_chain_hashrate(instance=elem.instance()))
|
|
77
|
-
elem.hashrates(self.mining_etl.get_chain_hashrates(instance=elem.instance()))
|
|
78
|
-
|
|
79
|
-
elif type(elem) == XMRig:
|
|
80
|
-
elem.hashrates(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
81
|
-
elem.hashrate(self.mining_etl.get_miner_hashrate(elem.instance()))
|
|
82
|
-
elem.uptime(self.mining_etl.get_miner_uptime(elem.instance()))
|
|
83
|
-
|
|
84
|
-
elif type(elem) == XMRigRemote:
|
|
85
|
-
print(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
86
|
-
elem.hashrates(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
87
|
-
|
|
88
|
-
return elem
|
|
89
|
-
|
|
90
|
-
|
|
91
72
|
def get_deployment(self, elem_type, instance=None):
|
|
92
73
|
if type(elem_type) == dict:
|
|
93
74
|
instance = elem_type[DField.INSTANCE]
|
|
@@ -144,7 +125,7 @@ class OpsMgr:
|
|
|
144
125
|
return self.mining_etl.get_remote_xmrig_timestamp(xmrig.instance())
|
|
145
126
|
|
|
146
127
|
|
|
147
|
-
def
|
|
128
|
+
def get_runtime_log(self, form_data: dict):
|
|
148
129
|
return self.ops_etl.get_ops_summary()
|
|
149
130
|
|
|
150
131
|
|
|
@@ -157,10 +138,33 @@ class OpsMgr:
|
|
|
157
138
|
return self.depl_client.job_queue.get_jobs()
|
|
158
139
|
|
|
159
140
|
|
|
160
|
-
def
|
|
141
|
+
def get_start_stop_log(self, event_list: list):
|
|
161
142
|
return self.ops_db.get_ops_events()
|
|
162
143
|
|
|
163
144
|
|
|
145
|
+
def hashrates(self, form_data: dict):
|
|
146
|
+
elem = form_data[DField.ELEMENT]
|
|
147
|
+
|
|
148
|
+
if type(elem) == P2Pool:
|
|
149
|
+
elem.hashrate(self.mining_etl.get_pool_hashrate(instance=elem.instance()))
|
|
150
|
+
elem.hashrates(self.mining_etl.get_pool_hashrates(instance=elem.instance()))
|
|
151
|
+
|
|
152
|
+
if type(elem) == InternalP2Pool:
|
|
153
|
+
elem.hashrate(self.mining_etl.get_chain_hashrate(instance=elem.instance()))
|
|
154
|
+
elem.hashrates(self.mining_etl.get_chain_hashrates(instance=elem.instance()))
|
|
155
|
+
|
|
156
|
+
elif type(elem) == XMRig:
|
|
157
|
+
elem.hashrates(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
158
|
+
elem.hashrate(self.mining_etl.get_miner_hashrate(elem.instance()))
|
|
159
|
+
elem.uptime(self.mining_etl.get_miner_uptime(elem.instance()))
|
|
160
|
+
|
|
161
|
+
elif type(elem) == XMRigRemote:
|
|
162
|
+
print(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
163
|
+
elem.hashrates(self.mining_etl.get_miner_hashrates(elem.instance()))
|
|
164
|
+
|
|
165
|
+
return elem
|
|
166
|
+
|
|
167
|
+
|
|
164
168
|
def log_viewer(self, form_data: dict):
|
|
165
169
|
elem_type = form_data[DField.ELEMENT_TYPE]
|
|
166
170
|
instance = form_data[DField.INSTANCE]
|
|
@@ -173,6 +177,12 @@ class OpsMgr:
|
|
|
173
177
|
return plot_metadata
|
|
174
178
|
|
|
175
179
|
|
|
180
|
+
def shares_found(self, form_data: dict):
|
|
181
|
+
p2pool = form_data[DField.ELEMENT]
|
|
182
|
+
p2pool.shares_found(self.mining_etl.get_share_found_events(pool=p2pool.instance()))
|
|
183
|
+
return p2pool
|
|
184
|
+
|
|
185
|
+
|
|
176
186
|
def set_donations(self, form_data: dict):
|
|
177
187
|
return DPane.DONATIONS
|
|
178
188
|
|
|
@@ -138,8 +138,8 @@ class P2Pool(SoftwareSystem):
|
|
|
138
138
|
def gen_logrotate_config(self, tmpl_file: str, vendor_dir: str, db4e_group:str):
|
|
139
139
|
# Logrotate configuration file
|
|
140
140
|
fq_config = os.path.join(
|
|
141
|
-
vendor_dir,
|
|
142
|
-
|
|
141
|
+
vendor_dir, DDef.LOG_ROTATE, DElem.P2POOL + "-" + self.instance() + \
|
|
142
|
+
DDef.CONF_SUFFIX)
|
|
143
143
|
|
|
144
144
|
# Populate the config template
|
|
145
145
|
placeholders = {
|
|
@@ -22,10 +22,11 @@ from db4e.Panes.P2PoolPane import P2PoolPane
|
|
|
22
22
|
from db4e.Panes.P2PoolHashratesPane import P2PoolHashratesPane
|
|
23
23
|
from db4e.Panes.ChainPane import ChainPane
|
|
24
24
|
from db4e.Panes.P2PoolRemotePane import P2PoolRemotePane
|
|
25
|
+
from db4e.Panes.P2PoolSharesFoundPane import P2PoolSharesFoundPane
|
|
25
26
|
from db4e.Panes.ResultsPane import ResultsPane
|
|
26
|
-
from db4e.Panes.
|
|
27
|
+
from db4e.Panes.StartStopLogPane import StartStopLogPane
|
|
27
28
|
from db4e.Panes.TUILogPane import TUILogPane
|
|
28
|
-
from db4e.Panes.
|
|
29
|
+
from db4e.Panes.RuntimePane import RuntimePane
|
|
29
30
|
from db4e.Panes.WelcomePane import WelcomePane
|
|
30
31
|
from db4e.Panes.XMRigHashratesPane import XMRigHashratesPane
|
|
31
32
|
from db4e.Panes.XMRigPane import XMRigPane
|
|
@@ -49,10 +50,11 @@ REGISTRY = {
|
|
|
49
50
|
DPane.P2POOL: (P2PoolPane, DLabel.P2POOL, DLabel.NEW),
|
|
50
51
|
DPane.P2POOL_HASHRATES: (P2PoolHashratesPane, DLabel.P2POOL, DLabel.HASHRATES),
|
|
51
52
|
DPane.P2POOL_REMOTE: (P2PoolRemotePane, DLabel.P2POOL_REMOTE, DLabel.CONFIG),
|
|
53
|
+
DPane.P2POOL_SHARES_FOUND: (P2PoolSharesFoundPane, DLabel.P2POOL, DLabel.SHARES_FOUND),
|
|
52
54
|
DPane.RESULTS: (ResultsPane, DLabel.DB4E_LONG, DLabel.RESULTS),
|
|
53
|
-
DPane.
|
|
55
|
+
DPane.START_STOP_LOG: (StartStopLogPane, DLabel.LOG, DLabel.START_STOP_LOG),
|
|
54
56
|
DPane.TUI_LOG: (TUILogPane, DLabel.LOG, DLabel.TUI_LOG),
|
|
55
|
-
DPane.
|
|
57
|
+
DPane.RUNTIME_LOG: (RuntimePane, DLabel.DB4E_LONG, DLabel.RUNTIME_LOG),
|
|
56
58
|
DPane.WELCOME: (WelcomePane, DLabel.DB4E_LONG, DLabel.WELCOME),
|
|
57
59
|
DPane.XMRIG: (XMRigPane, DLabel.XMRIG, DLabel.NEW),
|
|
58
60
|
DPane.XMRIG_HASHRATES: (XMRigHashratesPane, DLabel.XMRIG, DLabel.HASHRATES),
|
|
@@ -111,8 +111,8 @@ class XMRig(SoftwareSystem):
|
|
|
111
111
|
def gen_logrotate_config(self, tmpl_file: str, vendor_dir: str, db4e_group:str):
|
|
112
112
|
# Logrotate configuration file
|
|
113
113
|
fq_config = os.path.join(
|
|
114
|
-
vendor_dir,
|
|
115
|
-
|
|
114
|
+
vendor_dir, DDef.LOG_ROTATE, DElem.XMRIG + "-" + self.instance() + \
|
|
115
|
+
DDef.CONF_SUFFIX)
|
|
116
116
|
|
|
117
117
|
# Populate the config template placeholders
|
|
118
118
|
placeholders = {
|
|
@@ -53,7 +53,6 @@ class ChainBlocksFoundPane(Container):
|
|
|
53
53
|
classes=DForm.PANE_BOX)
|
|
54
54
|
|
|
55
55
|
def on_mount(self) -> None:
|
|
56
|
-
print(f"ChainBlocksFoundPane:on_mount()")
|
|
57
56
|
plt = self.query_one(PlotextPlot).plt
|
|
58
57
|
plt.bar(self.days, self.blocks_found, color="blue")
|
|
59
58
|
plt.title("Blocks Found")
|
|
@@ -84,7 +84,7 @@ class Db4EPane(Container):
|
|
|
84
84
|
|
|
85
85
|
Horizontal(
|
|
86
86
|
Button(label=DLabel.UPDATE, id=DButton.UPDATE),
|
|
87
|
-
Button(label=DLabel.
|
|
87
|
+
Button(label=DLabel.RUNTIME, id=DButton.RUNTIME),
|
|
88
88
|
classes=DForm.BUTTON_ROW
|
|
89
89
|
),
|
|
90
90
|
classes=DForm.PANE_BOX))
|
|
@@ -133,10 +133,10 @@ class Db4EPane(Container):
|
|
|
133
133
|
DField.ELEMENT: self.db4e,
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
elif button_id == DButton.
|
|
136
|
+
elif button_id == DButton.RUNTIME:
|
|
137
137
|
form_data = {
|
|
138
138
|
DField.TO_MODULE: DModule.OPS_MGR,
|
|
139
|
-
DField.TO_METHOD: DMethod.
|
|
139
|
+
DField.TO_METHOD: DMethod.GET_RUNTIME_LOG,
|
|
140
140
|
DField.ELEMENT_TYPE: DElem.DB4E,
|
|
141
141
|
DField.ELEMENT: self.db4e,
|
|
142
142
|
}
|