Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
e59446e1
Unverified
Commit
e59446e1
authored
Mar 24, 2023
by
mergify[bot]
Committed by
GitHub
Mar 24, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5245 from ethereum-optimism/sc/mon-balance-mon-new
feat(mon): create balance-mon service
parents
e2fa8a26
11712c1c
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
186 additions
and
0 deletions
+186
-0
ninety-schools-work.md
.changeset/ninety-schools-work.md
+5
-0
publish-canary.yml
.github/workflows/publish-canary.yml
+28
-0
release.yml
.github/workflows/release.yml
+28
-0
Dockerfile.packages
ops/docker/Dockerfile.packages
+4
-0
.env.example
packages/chain-mon/.env.example
+10
-0
package.json
packages/chain-mon/package.json
+1
-0
service.ts
packages/chain-mon/src/balance-mon/service.ts
+109
-0
index.ts
packages/chain-mon/src/index.ts
+1
-0
No files found.
.changeset/ninety-schools-work.md
0 → 100644
View file @
e59446e1
---
'
@eth-optimism/chain-mon'
:
minor
---
Introduces the balance-mon service to chain-mon.
.github/workflows/publish-canary.yml
View file @
e59446e1
...
...
@@ -18,6 +18,7 @@ jobs:
l2geth
:
${{ steps.packages.outputs.l2geth }}
message-relayer
:
${{ steps.packages.outputs.message-relayer }}
fault-detector
:
${{ steps.packages.outputs.fault-detector }}
balance-mon
:
${{ steps.packages.outputs.balance-mon }}
drippie-mon
:
${{ steps.packages.outputs.drippie-mon }}
wd-mon
:
${{ steps.packages.outputs.wd-mon }}
data-transport-layer
:
${{ steps.packages.outputs.data-transport-layer }}
...
...
@@ -230,6 +231,33 @@ jobs:
push
:
true
tags
:
ethereumoptimism/fault-detector:${{ needs.canary-publish.outputs.canary-docker-tag }}
balance-mon
:
name
:
Publish Balance Monitor Version ${{ needs.canary-publish.outputs.canary-docker-tag }}
needs
:
canary-publish
if
:
needs.canary-publish.outputs.balance-mon != ''
runs-on
:
ubuntu-latest
steps
:
-
name
:
Checkout
uses
:
actions/checkout@v2
-
name
:
Set up Docker Buildx
uses
:
docker/setup-buildx-action@v1
-
name
:
Login to Docker Hub
uses
:
docker/login-action@v1
with
:
username
:
${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }}
password
:
${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }}
-
name
:
Build and push
uses
:
docker/build-push-action@v2
with
:
context
:
.
file
:
./ops/docker/Dockerfile.packages
target
:
balance-mon
push
:
true
tags
:
ethereumoptimism/balance-mon:${{ needs.canary-publish.outputs.canary-docker-tag }}
drippie-mon
:
name
:
Publish Drippie Monitor Version ${{ needs.canary-publish.outputs.canary-docker-tag }}
needs
:
canary-publish
...
...
.github/workflows/release.yml
View file @
e59446e1
...
...
@@ -14,6 +14,7 @@ jobs:
l2geth
:
${{ steps.packages.outputs.l2geth }}
message-relayer
:
${{ steps.packages.outputs.message-relayer }}
fault-detector
:
${{ steps.packages.outputs.fault-detector }}
balance-mon
:
${{ steps.packages.outputs.drippie-mon }}
drippie-mon
:
${{ steps.packages.outputs.drippie-mon }}
wd-mon
:
${{ steps.packages.outputs.wd-mon }}
data-transport-layer
:
${{ steps.packages.outputs.data-transport-layer }}
...
...
@@ -364,6 +365,33 @@ jobs:
push
:
true
tags
:
ethereumoptimism/wd-mon:${{ needs.release.outputs.wd-mon }},ethereumoptimism/wd-mon:latest
drippie-mon
:
name
:
Publish Balance Monitor Version ${{ needs.release.outputs.balance-mon }}
needs
:
release
if
:
needs.release.outputs.balance-mon != ''
runs-on
:
ubuntu-latest
steps
:
-
name
:
Checkout
uses
:
actions/checkout@v2
-
name
:
Set up Docker Buildx
uses
:
docker/setup-buildx-action@v1
-
name
:
Login to Docker Hub
uses
:
docker/login-action@v1
with
:
username
:
${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }}
password
:
${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }}
-
name
:
Build and push
uses
:
docker/build-push-action@v2
with
:
context
:
.
file
:
./ops/docker/Dockerfile.packages
target
:
balance-mon
push
:
true
tags
:
ethereumoptimism/balance-mon:${{ needs.release.outputs.balance-mon }},ethereumoptimism/balance-mon:latest
drippie-mon
:
name
:
Publish Drippie Monitor Version ${{ needs.release.outputs.drippie-mon }}
needs
:
release
...
...
ops/docker/Dockerfile.packages
View file @
e59446e1
...
...
@@ -117,6 +117,10 @@ FROM base as replica-healthcheck
WORKDIR /opt/optimism/packages/replica-healthcheck
ENTRYPOINT ["npm", "run", "start"]
FROM base as balance-mon
WORKDIR /opt/optimism/packages/chain-mon
ENTRYPOINT ["npm", "run", "start:balance-mon"]
FROM base as drippie-mon
WORKDIR /opt/optimism/packages/chain-mon
ENTRYPOINT ["npm", "run", "start:drippie-mon"]
...
...
packages/chain-mon/.env.example
View file @
e59446e1
###############################################################################
# ↓ balance-mon ↓ #
###############################################################################
# RPC pointing to network to monitor balances on
BALANCE_MON__RPC=
# JSON array in the format [{ "address": <address>, "nickname": <nickname> }, ... ]
BALANCE_MON__ACCOUNTS=
###############################################################################
# ↓ drippie-mon ↓ #
###############################################################################
...
...
packages/chain-mon/package.json
View file @
e59446e1
...
...
@@ -9,6 +9,7 @@
"dist/*"
],
"scripts"
:
{
"start:balance-mon"
:
"ts-node ./src/balance-mon/service.ts"
,
"start:drippie-mon"
:
"ts-node ./src/drippie-mon/service.ts"
,
"start:wd-mon"
:
"ts-node ./src/wd-mon/service.ts"
,
"test:coverage"
:
"echo 'No tests defined.'"
,
...
...
packages/chain-mon/src/balance-mon/service.ts
0 → 100644
View file @
e59446e1
import
{
BaseServiceV2
,
StandardOptions
,
Gauge
,
Counter
,
validators
,
}
from
'
@eth-optimism/common-ts
'
import
{
Provider
}
from
'
@ethersproject/abstract-provider
'
import
{
ethers
}
from
'
ethers
'
import
{
version
}
from
'
../../package.json
'
type
BalanceMonOptions
=
{
rpc
:
Provider
accounts
:
string
}
type
BalanceMonMetrics
=
{
balances
:
Gauge
unexpectedRpcErrors
:
Counter
}
type
BalanceMonState
=
{
accounts
:
Array
<
{
address
:
string
;
nickname
:
string
}
>
}
export
class
BalanceMonService
extends
BaseServiceV2
<
BalanceMonOptions
,
BalanceMonMetrics
,
BalanceMonState
>
{
constructor
(
options
?:
Partial
<
BalanceMonOptions
&
StandardOptions
>
)
{
super
({
version
,
name
:
'
balance-mon
'
,
loop
:
true
,
options
:
{
loopIntervalMs
:
60
_000
,
...
options
,
},
optionsSpec
:
{
rpc
:
{
validator
:
validators
.
provider
,
desc
:
'
Provider for network to monitor balances on
'
,
},
accounts
:
{
validator
:
validators
.
str
,
desc
:
'
JSON array of [{ address, nickname }] to monitor balances of
'
,
public
:
true
,
},
},
metricsSpec
:
{
balances
:
{
type
:
Gauge
,
desc
:
'
Balances of addresses
'
,
labels
:
[
'
address
'
,
'
nickname
'
],
},
unexpectedRpcErrors
:
{
type
:
Counter
,
desc
:
'
Number of unexpected RPC errors
'
,
labels
:
[
'
section
'
,
'
name
'
],
},
},
})
}
protected
async
init
():
Promise
<
void
>
{
this
.
state
.
accounts
=
JSON
.
parse
(
this
.
options
.
accounts
)
}
protected
async
main
():
Promise
<
void
>
{
for
(
const
account
of
this
.
state
.
accounts
)
{
let
balance
:
ethers
.
BigNumber
try
{
balance
=
await
this
.
options
.
rpc
.
getBalance
(
account
.
address
)
}
catch
(
err
)
{
this
.
logger
.
info
(
`got unexpected RPC error`
,
{
section
:
'
balances
'
,
name
:
'
getBalance
'
,
err
,
})
this
.
metrics
.
unexpectedRpcErrors
.
inc
({
section
:
'
balances
'
,
name
:
'
getBalance
'
,
})
continue
}
this
.
logger
.
info
(
`got balance`
,
{
address
:
account
.
address
,
nickname
:
account
.
nickname
,
balance
:
balance
.
toString
(),
})
// Parse the balance as an integer instead of via toNumber() to avoid ethers throwing an
// an error. We might get rounding errors but we don't need perfect precision here, just a
// generally accurate sense for what the current balance is.
this
.
metrics
.
balances
.
set
(
{
address
:
account
.
address
,
nickname
:
account
.
nickname
},
parseInt
(
balance
.
toString
(),
10
)
)
}
}
}
if
(
require
.
main
===
module
)
{
const
service
=
new
BalanceMonService
()
service
.
run
()
}
packages/chain-mon/src/index.ts
View file @
e59446e1
export
*
from
'
./balance-mon/service
'
export
*
from
'
./drippie-mon/service
'
export
*
from
'
./wd-mon/service
'
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment