Skip to content

Commit

Permalink
cardano-tracer: new changes, new tests for multi forwarders, EKG.
Browse files Browse the repository at this point in the history
  • Loading branch information
Denis Shevchenko committed Nov 25, 2021
1 parent 4f60dde commit 66ab322
Show file tree
Hide file tree
Showing 42 changed files with 1,019 additions and 642 deletions.
13 changes: 11 additions & 2 deletions cabal.project
Expand Up @@ -73,6 +73,9 @@ package cardano-submit-api
package cardano-testnet
tests: True

package cardano-tracer
tests: True

package plutus-examples
tests: True

Expand Down Expand Up @@ -273,8 +276,14 @@ source-repository-package
source-repository-package
type: git
location: https://github.com/input-output-hk/ekg-forward
tag: d9e8fd302fa6ba41c07183d371e6777286d37bc2
--sha256: 0s8cblhq3i528jj7r7yd4v82nqzafj8vrgf0y80l7saxc3a5f2lk
tag: b50b215651822fa0d5f5dd2fc28b57ca2b33baa4
--sha256: 1dlknw83cmya9z8s2iwi35ymhv1yip5wvdh8p3jhmx9yv89apkq2

source-repository-package
type: git
location: https://github.com/HeinrichApfelmus/threepenny-gui
tag: e3bb8283fc7d2e8aa374eea29426002e8dcd67a8
--sha256: 0nf836b552asgpwn2gxwl7yd7ssdhb1wkvdqz6s4dpzqnlpyivx9

source-repository-package
type: git
Expand Down
3 changes: 3 additions & 0 deletions cardano-tracer/CODEOWNERS
Validating CODEOWNERS rules …
@@ -0,0 +1,3 @@
# General reviewers per PR
# Denis Serge
* @denisshevchenko @deepfire
10 changes: 7 additions & 3 deletions cardano-tracer/README.md
@@ -1,5 +1,9 @@
# cardano-tracer
# Cardano Tracer

`cardano-tracer` is an application for logging and monitoring over `cardano-node`. After it is connected to the node, it periodically asks the node for different information, receives it, and handles it.
`cardano-tracer` is a service for logging and monitoring over `cardano-node`. After it is connected to the node, it periodically asks the node for different information, receives it, and handles it.

For more details please [read the documentation](https://github.com/input-output-hk/cardano-node/blob/tracing-master/cardano-tracer/docs/cardano-tracer.md).
For more details please [read the documentation](https://github.com/input-output-hk/cardano-node/blob/master/cardano-tracer/docs/cardano-tracer.md).

## Developers

Benchmarking team is responsible for this service. The primary developer is [@denisshevchenko](https://github.com/denisshevchenko).
5 changes: 2 additions & 3 deletions cardano-tracer/app/cardano-tracer.hs
Expand Up @@ -6,9 +6,8 @@ import Cardano.Tracer.Run (runCardanoTracer)
import Paths_cardano_tracer (version)

main :: IO ()
main = do
tracerParams <- customExecParser (prefs showHelpOnEmpty) tracerInfo
runCardanoTracer tracerParams
main =
runCardanoTracer =<< customExecParser (prefs showHelpOnEmpty) tracerInfo
where
tracerInfo :: ParserInfo TracerParams
tracerInfo = info
Expand Down
21 changes: 11 additions & 10 deletions cardano-tracer/cardano-tracer.cabal
@@ -1,7 +1,7 @@
cabal-version: 2.4
name: cardano-tracer
version: 0.1.0
synopsis: See README for more info
synopsis: A service for logging and monitoring over Cardano node.
description: See README for more info
license: Apache-2.0
license-file: LICENSE
Expand Down Expand Up @@ -34,12 +34,7 @@ library
exposed-modules: Cardano.Tracer.Acceptors.Client
Cardano.Tracer.Acceptors.Run
Cardano.Tracer.Acceptors.Server
Cardano.Tracer.Acceptors.Utils
Cardano.Tracer.CLI
Cardano.Tracer.Configuration
Cardano.Tracer.Run
Cardano.Tracer.Types
Cardano.Tracer.Utils
Cardano.Tracer.Acceptors.Utils

Cardano.Tracer.Handlers.Logs.File
Cardano.Tracer.Handlers.Logs.Journal
Expand All @@ -51,10 +46,17 @@ library
Cardano.Tracer.Handlers.Metrics.Prometheus
Cardano.Tracer.Handlers.Metrics.Servers

Cardano.Tracer.CLI
Cardano.Tracer.Configuration
Cardano.Tracer.Run
Cardano.Tracer.Types
Cardano.Tracer.Utils

other-modules: Paths_cardano_tracer

build-depends: aeson
, async
, async-extras
, blaze-html
, blaze-markup
, bytestring
Expand All @@ -74,6 +76,7 @@ library
, snap-server
, stm
, text
, threepenny-gui
, time
, trace-dispatcher
, trace-forward
Expand Down Expand Up @@ -120,7 +123,7 @@ library demo-forwarder-lib
executable demo-forwarder
import: base, project-config

hs-source-dirs: demo
hs-source-dirs: demo/ssh

main-is: forwarder.hs

Expand All @@ -142,7 +145,6 @@ test-suite cardano-tracer-test
Cardano.Tracer.Test.Logs.Tests
Cardano.Tracer.Test.Network.Tests
Cardano.Tracer.Test.Queue.Tests

Cardano.Tracer.Test.Utils

build-depends: async
Expand All @@ -158,7 +160,6 @@ test-suite cardano-tracer-test
, filepath
, ouroboros-network-framework
, QuickCheck
, stm
, tasty
, tasty-quickcheck
, text
Expand Down
40 changes: 40 additions & 0 deletions cardano-tracer/configuration/complete-example.json
@@ -0,0 +1,40 @@
{
"network": {
"tag": "AcceptAt",
"contents": "/tmp/forwarder.sock"
},
"loRequestNum": 100,
"ekgRequestFreq": 2,
"hasEKG": [
{
"epHost": "127.0.0.1",
"epPort": 3100
},
{
"epHost": "127.0.0.1",
"epPort": 3101
}
],
"hasPrometheus": {
"epHost": "127.0.0.1",
"epPort": 3000
},
"logging": [
{
"logRoot": "/tmp/cardano-tracer-h-logs",
"logMode": "FileMode",
"logFormat": "ForHuman"
},
{
"logRoot": "/tmp/cardano-tracer-m-logs",
"logMode": "FileMode",
"logFormat": "ForMachine"
}
],
"rotation": {
"rpFrequencySecs": 15,
"rpKeepFilesNum": 1,
"rpLogLimitBytes": 50000,
"rpMaxAgeHours": 1
}
}
Expand Up @@ -3,18 +3,11 @@
"tag": "ConnectTo",
"contents": ["/tmp/forwarder.sock"]
},
"hasEKG": null,
"hasPrometheus": null,
"logging": [
{
"logRoot": "/tmp/cardano-tracer-logs",
"logMode": "FileMode",
"logFormat": "ForMachine"
}
],
"rotation": {
"rpKeepFilesNum": 1,
"rpLogLimitBytes": 50000,
"rpMaxAgeHours": 1
}
]
}
File renamed without changes.
31 changes: 31 additions & 0 deletions cardano-tracer/demo/multi/active-tracer-config.json
@@ -0,0 +1,31 @@
{
"network": {
"tag": "ConnectTo",
"contents": [
"/run/user/1000/cardano-tracer-demo-1.sock",
"/run/user/1000/cardano-tracer-demo-2.sock",
"/run/user/1000/cardano-tracer-demo-3.sock"
]
},
"hasEKG": [
{
"epHost": "127.0.0.1",
"epPort": 3100
},
{
"epHost": "127.0.0.1",
"epPort": 3101
}
],
"hasPrometheus": {
"epHost": "127.0.0.1",
"epPort": 3000
},
"logging": [
{
"logRoot": "/run/user/1000/cardano-tracer-demo-logs",
"logMode": "FileMode",
"logFormat": "ForMachine"
}
]
}
File renamed without changes.
27 changes: 27 additions & 0 deletions cardano-tracer/demo/multi/passive-tracer-config.json
@@ -0,0 +1,27 @@
{
"network": {
"tag": "AcceptAt",
"contents": "/run/user/1000/cardano-tracer-demo-1.sock"
},
"hasEKG": [
{
"epHost": "127.0.0.1",
"epPort": 3100
},
{
"epHost": "127.0.0.1",
"epPort": 3101
}
],
"hasPrometheus": {
"epHost": "127.0.0.1",
"epPort": 3000
},
"logging": [
{
"logRoot": "/run/user/1000/cardano-tracer-demo-logs",
"logMode": "FileMode",
"logFormat": "ForMachine"
}
]
}
57 changes: 57 additions & 0 deletions cardano-tracer/demo/multi/run.sh
@@ -0,0 +1,57 @@
#!/bin/sh

if [ $# -eq 0 ]; then
echo "Usage: ./run.sh FMODE DELAY, where FMODE is forwarder's mode, Responder or Initiator, and DELAY is a working time in seconds."
exit 1
fi

rm -rf cardano-tracer demo-forwarder

cabal build cardano-tracer && cabal install cardano-tracer --installdir=./ --overwrite-policy=always

readonly FORWARDER_MODE=$1
readonly DELAY_IN_SECS=$2

readonly TMP_DIR=/run/user/1000
readonly TRACER_LOG_ROOT=${TMP_DIR}/cardano-tracer-demo-logs

readonly SOCK_1=${TMP_DIR}/cardano-tracer-demo-1.sock
readonly SOCK_2=${TMP_DIR}/cardano-tracer-demo-2.sock
readonly SOCK_3=${TMP_DIR}/cardano-tracer-demo-3.sock

rm -rf ${TRACER_LOG_ROOT} ${SOCK_1} ${SOCK_2} ${SOCK_3}
mkdir ${TRACER_LOG_ROOT}

echo "Run 3 demo-forwarders..."
if [ "$FORWARDER_MODE" == "Responder" ]
then
# Run demo-forwarders in Responder mode, so they will accept connections from the tracer via 3 sockets.
FORWARDER_1_PID=$(nohup ./demo-forwarder ${SOCK_1} ${FORWARDER_MODE} &>/dev/null & echo $!)
FORWARDER_2_PID=$(nohup ./demo-forwarder ${SOCK_2} ${FORWARDER_MODE} &>/dev/null & echo $!)
FORWARDER_3_PID=$(nohup ./demo-forwarder ${SOCK_3} ${FORWARDER_MODE} &>/dev/null & echo $!)
else
# Run demo-forwarders in Initiator mode, so they will connect to the tracer via the same socket.
FORWARDER_1_PID=$(nohup ./demo-forwarder ${SOCK_1} ${FORWARDER_MODE} &>/dev/null & echo $!)
FORWARDER_2_PID=$(nohup ./demo-forwarder ${SOCK_1} ${FORWARDER_MODE} &>/dev/null & echo $!)
FORWARDER_3_PID=$(nohup ./demo-forwarder ${SOCK_1} ${FORWARDER_MODE} &>/dev/null & echo $!)
fi

echo "Run cardano-tracer..."
if [ "$FORWARDER_MODE" == "Responder" ]
then
TRACER_CONFIG=active-tracer-config.json
else
TRACER_CONFIG=passive-tracer-config.json
fi
./cardano-tracer --config ${TRACER_CONFIG}

#echo "Wait for ${DELAY_IN_SECS} seconds..."
#sleep ${DELAY_IN_SECS}

#echo "Stop..."
#kill ${FORWARDER_1_PID}
#kill ${FORWARDER_2_PID}
#kill ${FORWARDER_3_PID}
#kill ${TRACER_PID}

#rm -rf cardano-tracer demo-forwarder
35 changes: 35 additions & 0 deletions cardano-tracer/demo/ssh/README.md
@@ -0,0 +1,35 @@
# SSH Local Forwarding Demo

Run `./run.sh PASS FMODE`, where `PASS` is your ssh password for `localhost`, and `FMODE` is forwarder's mode: `Responder` or `Initiator`.

As a result, `demo-forwarder` and `cardano-tracer` will be launched on _different_ local sockets, so direct connection between them is impossible:

```
+----------------+ +----------------+
| demo-forwarder |-> sock1 sock2 <-| cardano-tracer |
+----------------+ +----------------+
```

That's why we initiate ssh local forwarding which connects these local sockets, so `demo-forwarder` can work with `cardano-tracer`:

```
+----------------+ +----------------+
| demo-forwarder |-> sock1 <---SSH forwarding---> sock2 <-| cardano-tracer |
+----------------+ +----------------+
```

Please note that if you run the script with `Responder` mode, `demo-forwarder` works as a server, and `cardano-tracer` works as a client:

```
+----------------+ +----------------+
| demo-forwarder | <====connect====| cardano-tracer |
+----------------+ +----------------+
```

otherwise, with `Initiator` mode, we have an opposite scenario:

```
+----------------+ +----------------+
| demo-forwarder |====connect====> | cardano-tracer |
+----------------+ +----------------+
```
11 changes: 11 additions & 0 deletions cardano-tracer/demo/ssh/forwarder.hs
@@ -0,0 +1,11 @@
{-# LANGUAGE LambdaCase #-}

import System.Environment (getArgs)

import Cardano.Tracer.Test.Forwarder

main :: IO ()
main = getArgs >>= \case
[localSock, "Initiator"] -> launchForwardersSimple Initiator localSock 1000 2000
[localSock, "Responder"] -> launchForwardersSimple Responder localSock 1000 2000
_ -> putStrLn "Usage: ./demo-forwarder Initiator|Responder /path/to/local/sock"
@@ -1,7 +1,7 @@
#!/bin/sh

if [ $# -eq 0 ]; then
echo "Usage: ./run-ssh-forward-demo.sh PASS FMODE, where PASS is your ssh password and FMODE is forwarder's mode, Responder or Initiator."
echo "Usage: ./run.sh PASS FMODE, where PASS is your ssh password and FMODE is forwarder's mode, Responder or Initiator."
exit 1
fi

Expand Down

0 comments on commit 66ab322

Please sign in to comment.