Implemented stats

pull/17/head
マリウス 2 years ago
parent 28df251ed8
commit d5b9a61aa3
No known key found for this signature in database
GPG Key ID: 272ED814BF63261F

@ -12,6 +12,7 @@ import (
"berty.tech/go-orbit-db/stores"
"berty.tech/go-orbit-db/stores/documentstore"
config "github.com/ipfs/go-ipfs-config"
"github.com/ipfs/go-ipfs/core"
icore "github.com/ipfs/interface-go-ipfs-core"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/mitchellh/mapstructure"
@ -27,7 +28,10 @@ type Database struct {
Cache string
Logger *zap.Logger
IPFSNode icore.CoreAPI
IPFSNode *core.IpfsNode
IPFSCoreAPI icore.CoreAPI
OrbitDB orbitdb.OrbitDB
Store orbitdb.DocumentStore
StoreEventChan <-chan events.Event
@ -36,7 +40,7 @@ type Database struct {
func (db *Database) init() (error) {
var err error
db.OrbitDB, err = orbitdb.NewOrbitDB(db.ctx, db.IPFSNode, &orbitdb.NewOrbitDBOptions{
db.OrbitDB, err = orbitdb.NewOrbitDB(db.ctx, db.IPFSCoreAPI, &orbitdb.NewOrbitDBOptions{
Directory: &db.Cache,
Logger: db.Logger,
})
@ -88,7 +92,7 @@ func(db *Database) connectToPeers() error {
for _, peerInfo := range peerInfos {
go func(peerInfo *peer.AddrInfo) {
defer wg.Done()
err := db.IPFSNode.Swarm().Connect(db.ctx, *peerInfo)
err := db.IPFSCoreAPI.Swarm().Connect(db.ctx, *peerInfo)
if err != nil {
db.Logger.Debug("failed to connect", zap.String("peerID", peerInfo.ID.String()), zap.Error(err))
} else {
@ -123,7 +127,7 @@ func NewDatabase(
return nil, err
}
db.IPFSNode, err = createNode(ctx, defaultPath)
db.IPFSNode, db.IPFSCoreAPI, err = createNode(ctx, defaultPath)
if err != nil {
return nil, err
}

@ -33,10 +33,10 @@ func setupPlugins(path string) error {
return nil
}
func createNode(ctx context.Context, repoPath string) (icore.CoreAPI, error) {
func createNode(ctx context.Context, repoPath string) (*core.IpfsNode, icore.CoreAPI, error) {
repo, err := fsrepo.Open(repoPath)
if err != nil {
return nil, err
return nil, nil, err
}
nodeOptions := &core.BuildCfg{
@ -50,10 +50,15 @@ func createNode(ctx context.Context, repoPath string) (icore.CoreAPI, error) {
node, err := core.NewNode(ctx, nodeOptions)
if err != nil {
return nil, err
return nil, nil, err
}
return coreapi.NewCoreAPI(node)
coreAPI, err := coreapi.NewCoreAPI(node)
if err != nil {
return nil, nil, err
}
return node, coreAPI, nil
}
func getUnixfsNode(path string) (files.Node, error) {

@ -77,6 +77,19 @@ func main() {
}
go func() {
peers := 0
for {
bw := db.IPFSNode.Reporter.GetBandwidthTotals()
connections, err := db.IPFSCoreAPI.Swarm().Peers(context.Background())
if err == nil {
peers = len(connections)
}
TUI.SetStats(int64(peers), int64(bw.RateIn), int64(bw.RateOut), bw.TotalIn , bw.TotalOut)
time.Sleep(time.Second * 5)
}
}()
// ======================== TESTING ===============================
// var articles []models.Article
// mockGroups := []string{

@ -12,11 +12,11 @@ import (
)
var HEADER_LOGO =
` _ _ _ __ ____ __ _ __ ___ ____
/ / / // / __/_ _____ ___ ____/ / (_)__ _/ / _ _____ ___ __( _ )/ / /
_\ _\_\_\\_\ \/ // / _ \/ -_) __/ _ \/ / _ \/ _ \ |/|/ / _ \/ // / _ /_ _/
/ / / // /___/\_,_/ .__/\__/_/ /_//_/_/\_, /_//_/__,__/\_,_/\_, /\___/ /_/
/_/ /___/ /___/
`[white] _ _ _ __ [-][hotpink]____ __ _ __ ___ ____[-] [grey]⦿ %d PEERS[-]
[teal] / / / // [-][hotpink]/ __/_ _____ ___ ____/ / (_)__ _/ / _ _____ ___ __( _ )/ / /[-] [yellow]▲ %.2f[-] [grey]MB/s[-]
[teal] _\ _\_\_\\_[-][fuchsia]\ \/ // / _ \/ -_) __/ _ \/ / _ \/ _ \ |/|/ / _ \/ // / _ /_ _/[-] [teal]▼ %.2f[-] [grey]MB/s[-]
[darkcyan] / / / // [-][hotpink]/___/\_,_/ .__/\__/_/ /_//_/_/\_, /_//_/__,__/\_,_/\_, /\___/ /_/[-] [yellow]▲ %.2f[-] [grey]MB[-]
[hotpink] /_/ /___/ /___/[-] [teal] %.2f[-] [grey]MB[-]
`
type GroupMapEntry struct {
@ -76,7 +76,8 @@ func(t *TUI) NewMainscreen() (*Mainscreen) {
mainscreen.Header = tview.NewTextView().
SetText(HEADER_LOGO).
SetTextColor(tcell.ColorHotPink)
SetTextColor(tcell.ColorHotPink).
SetDynamicColors(true)
mainscreen.Header.SetBorder(false)
mainscreen.Footer = tview.NewTextView().
@ -103,6 +104,18 @@ func (mainscreen *Mainscreen) SetFooter(text string) {
mainscreen.Footer.SetText(text)
}
func (mainscreen *Mainscreen) SetStats(stats map[string]int64) {
peers := stats["peers"]
totalIn := float64(stats["total_in"]) / 1024.0 / 1024.0
totalOut := float64(stats["total_out"]) / 1024.0 / 1024.0
rateIn := float64(stats["rate_in"]) / 1024.0 / 1024.0
rateOut := float64(stats["rate_out"]) / 1024.0 / 1024.0
mainscreen.Header.SetText(
fmt.Sprintf(HEADER_LOGO, peers, rateOut, rateIn, totalOut, totalIn),
)
}
func (mainscreen *Mainscreen) GetCanvas() (tview.Primitive) {
return mainscreen.Canvas
}

@ -29,6 +29,8 @@ type TUI struct {
Config *config.Config
Logger *zap.Logger
Stats map[string]int64
}
type View interface {
@ -66,6 +68,8 @@ func Init(embedfs *embed.FS, cfg *config.Config, logger *zap.Logger) (*TUI) {
t.Config = cfg
t.Logger = logger
t.Stats = make(map[string]int64)
logoBytes, err := embedfs.ReadFile("superhighway84.jpeg")
if err != nil {
log.Panicln(err)
@ -190,3 +194,15 @@ func(t *TUI) ShowErrorModal(text string) {
},
})
}
func (t* TUI) SetStats(peers, rateIn, rateOut, totalIn, totalOut int64) () {
t.Stats["peers"] = peers
t.Stats["rate_in"] = rateIn
t.Stats["rate_out"] = rateOut
t.Stats["total_in"] = totalIn
t.Stats["total_out"] = totalOut
t.Views["mainscreen"].(*Mainscreen).SetStats(t.Stats)
t.App.Draw()
}

Loading…
Cancel
Save