Skip to content
Snippets Groups Projects
Select Git revision
  • 4fb473f25a25e2cdcb0d32c04afde622fafab7bc
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

remotelogger.go

Blame
  • tps.go 1.57 KiB
    package dashboard
    
    import (
    	"encoding/binary"
    	"html/template"
    	"net/http"
    	"sync"
    
    	"github.com/gorilla/websocket"
    	"github.com/iotaledger/goshimmer/packages/events"
    	"github.com/iotaledger/goshimmer/plugins/metrics"
    )
    
    var (
    	homeTempl, templ_err = template.New("dashboard").Parse(tpsTemplate)
    	upgrader             = websocket.Upgrader{
    		ReadBufferSize:  1024,
    		WriteBufferSize: 1024,
    	}
    )
    
    // ServeWs websocket
    func ServeWs(w http.ResponseWriter, r *http.Request) {
    	ws, err := upgrader.Upgrade(w, r, nil)
    	if err != nil {
    		return
    	}
    
    	var websocketWriteMutex sync.Mutex
    
    	notifyWebsocketClient := events.NewClosure(func(sampledTPS uint64) {
    		go func() {
    			websocketWriteMutex.Lock()
    			defer websocketWriteMutex.Unlock()
    
    			p := make([]byte, 4)
    			binary.LittleEndian.PutUint32(p, uint32(sampledTPS))
    			if err := ws.WriteMessage(websocket.BinaryMessage, p); err != nil {
    				return
    			}
    		}()
    	})
    
    	metrics.Events.ReceivedTPSUpdated.Attach(notifyWebsocketClient)
    
    	for {
    		if _, _, err := ws.ReadMessage(); err != nil {
    			break
    		}
    	}
    
    	metrics.Events.ReceivedTPSUpdated.Detach(notifyWebsocketClient)
    }
    
    // ServeHome registration
    func ServeHome(w http.ResponseWriter, r *http.Request) {
    	if r.URL.Path != "/dashboard" {
    		http.Error(w, "Not found", http.StatusNotFound)
    		return
    	}
    	if r.Method != "GET" {
    		http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
    		return
    	}
    	if templ_err != nil {
    		panic("HTML template error")
    	}
    
    	_ = homeTempl.Execute(w, &struct {
    		Host string
    		Data []uint32
    	}{
    		r.Host,
    		TPSQ,
    	})
    }
    
    var TPSQ []uint32
    
    const (
    	MAX_Q_SIZE int = 3600
    )