mirror of
https://github.com/eosswedenorg/thalos-docs
synced 2026-06-16 04:34:55 +02:00
2.9 KiB
2.9 KiB
Go
package main
import (
"context"
"fmt"
"os"
"os/signal"
"github.com/eosswedenorg/thalos/api"
"github.com/eosswedenorg/thalos/api/message"
_ "github.com/eosswedenorg/thalos/api/message/json"
api_redis "github.com/eosswedenorg/thalos/api/redis"
"github.com/redis/go-redis/v9"
)
func main() {
// Create redis client
rdb := redis.NewClient(&redis.Options{})
sub := api_redis.NewSubscriber(context.Background(), rdb, api_redis.Namespace{
Prefix: "ship",
ChainID: "1064487b3cd1a897ce03ae5b6a865651747e2e152090f99c1d19d44e01aea5a4", // Wax mainnet.
})
codec, err := message.GetCodec("json")
if err != nil {
fmt.Println("Failed to get json codec")
return
}
client := api.NewClient(sub, codec.Decoder)
client.OnAction = func(act message.ActionTrace) {
fmt.Println("ActionTrace")
fmt.Println(act)
fmt.Println("---")
}
client.OnHeartbeat = func(hb message.HeartBeat) {
fmt.Println("HeartBeat -- block:", hb.BlockNum, "head:", hb.HeadBlockNum, "lib:", hb.LastIrreversibleBlockNum)
}
// Subscribe to some stuffs.
client.Subscribe(api.ActionChannel{Contract: "eosio"}.Channel())
client.Subscribe(api.ActionChannel{Name: "mine"}.Channel())
client.Subscribe(api.HeartbeatChannel)
go func() {
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
<-sig
fmt.Println("Got interrupt")
client.Close()
}()
// Read stuff.
client.Run()
}
Python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# This example will listen for new actions on the specified channel and log them to a file
# You can specify multiple channels to listen to by adding them to the redis_channels list
# You need to have the redis-py library installed for this to work
# You can install it with pip: pip3 install redis
# Before you start this script, make sure you have the redis-server running
import redis
import logging
import os
abs_path = os.path.dirname(__file__)
# Redis connection options
redis_ip = '127.0.0.1'
redis_port = 6379
redis_db = 0
# Channels to subscribe to, can specify multiple
redis_channels = ['ship::1064487b3cd1a897ce03ae5b6a865651747e2e152090f99c1d19d44e01aea5a4::actions/name/transfer']
# Redis connection
redis_connection = redis.Redis(host=redis_ip, port=redis_port, db=redis_db)
pubsub = redis_connection.pubsub()
pubsub.subscribe(redis_channels)
# Logging options
logging.basicConfig(
filename=f'/{abs_path}/output.log',
level=logging.INFO,
format='%(asctime)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# Listen for new actions
for message in pubsub.listen():
try:
# Filter out non-message events
if message['type'] == 'message':
# Log and print the message
logging.info(message['data'].decode('utf-8'))
print(message['data'].decode('utf-8'))
except:
# Log if the message failed to decode
logging.info("failed_decode",message['data'])