Commit 9f43843b authored by David Fifield's avatar David Fifield
Browse files

Add -snmp-log option.

parent b63d2272
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
package snowflake_client

import (
	"fmt"
	"log"
	"os"
	"time"

	"github.com/xtaci/kcp-go/v5"
)

const (
@@ -14,6 +18,10 @@ type bytesLogger interface {
	addInbound(int64)
}

var SNMPRunID [8]byte
var SNMPLogFile *os.File
var SNMPRecordCounter int64

// Default bytesLogger does nothing.
type bytesNullLogger struct{}

@@ -52,6 +60,13 @@ func (b *bytesSyncLogger) log() {
			outEvents = 0
			inbound = 0
			inEvents = 0
			if SNMPLogFile != nil {
				err := logSNMP(SNMPLogFile, SNMPRunID, SNMPRecordCounter)
				SNMPRecordCounter++
				if err != nil {
					log.Printf("error logging SNMP: %v", err)
				}
			}
		case amount := <-b.outboundChan:
			outbound += amount
			outEvents++
@@ -69,3 +84,19 @@ func (b *bytesSyncLogger) addOutbound(amount int64) {
func (b *bytesSyncLogger) addInbound(amount int64) {
	b.inboundChan <- amount
}

func logSNMP(f *os.File, runID [8]byte, counter int64) error {
	_, err := fmt.Fprintf(f, "%x,%d,%s,%s\n", runID, counter, "Date", time.Now().UTC().Format(time.RFC3339))
	if err != nil {
		return err
	}
	labels := kcp.DefaultSnmp.Header()
	values := kcp.DefaultSnmp.ToSlice()
	for i := 0; i < len(labels) && i < len(values); i++ {
		_, err := fmt.Fprintf(f, "%x,%d,%s,%s\n", runID, counter, labels[i], values[i])
		if err != nil {
			return err
		}
	}
	return nil
}
+16 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
package main

import (
	"crypto/rand"
	"flag"
	"fmt"
	"io"
@@ -160,6 +161,7 @@ func main() {
	max := flag.Int("max", DefaultSnowflakeCapacity,
		"capacity for number of multiplexed WebRTC peers")
	versionFlag := flag.Bool("version", false, "display version info to stderr and quit")
	snmpLogFilename := flag.String("snmp-log", "", "name of kcp-go SNMP log file")

	// Deprecated
	oldLogToStateDir := flag.Bool("logToStateDir", false, "use -log-to-state-dir instead")
@@ -203,6 +205,20 @@ func main() {
		log.SetOutput(&safelog.LogScrubber{Output: logOutput})
	}

	if *snmpLogFilename != "" {
		var err error
		sf.SNMPLogFile, err = os.OpenFile(*snmpLogFilename,
			os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600)
		if err != nil {
			log.Fatal(err)
		}
		_, err = rand.Read(sf.SNMPRunID[:])
		if err != nil {
			log.Fatal(err)
		}
		defer sf.SNMPLogFile.Close()
	}

	log.Printf("snowflake-client %s\n", version.GetVersion())

	iceAddresses := strings.Split(strings.TrimSpace(*iceServersCommas), ",")