Skip to content
Snippets Groups Projects

Streamline Logging to be more useful for using the proto-kms

Merged Martin Stiemerling requested to merge log-system-improvement into main
1 file
+ 25
20
Compare changes
  • Side-by-side
  • Inline
@@ -9,7 +9,6 @@ package quantumlayer
* transmitted to the other end.
*
*/
import (
"context"
"crypto/rand"
@@ -45,11 +44,12 @@ type QuantumlayerEmuPRNG struct {
qlPeerMutex sync.Mutex
}
func NewQuantumlayerEmuPRNG(logOutput io.Writer, logInJson bool) (newql *QuantumlayerEmuPRNG) {
func NewQuantumlayerEmuPRNG(logOutput io.Writer, logLevel log.Level, logInJson bool) (newql *QuantumlayerEmuPRNG) {
/*
* Setup logging
*/
//What level
log.SetLevel(logLevel)
// Where to send log out put
log.SetOutput(logOutput)
// and plain-text (standard) or json
@@ -58,8 +58,12 @@ func NewQuantumlayerEmuPRNG(logOutput io.Writer, logInJson bool) (newql *Quantum
} else {
log.SetFormatter(&log.JSONFormatter{})
}
// Always print code function
log.SetReportCaller(true)
// print code function if level is set to Debug
if logLevel == log.DebugLevel {
log.SetReportCaller(true)
} else {
log.SetReportCaller(false)
}
// Return PRNG Quantum Layer
return &QuantumlayerEmuPRNG{
@@ -95,28 +99,28 @@ func (qlemuprng *QuantumlayerEmuPRNG) Configure(localQLAddress ...string) {
func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
if qlemuprng.configured == false {
// nothing do here move on
log.Printf("Sorry, the quantum layer is not configured for action. You've missed Configure()")
log.Errorf("QuantumlayerEmuPRNG: Sorry, the quantum layer is not configured for action. You've missed Configure()")
return
}
//qlemuprng.poweron = false
log.Println("QuantumlayerEmuPRNG is powering on...charging.")
log.Infof("QuantumlayerEmuPRNG: is powering on...charging.")
// serve UDP incoming
if qlemuprng.udpSrvConn == nil {
go func() {
// Get UDP server part going...
log.Printf("localQLAddress is %s", qlemuprng.localQLAddress)
log.Debugf("QuantumlayerEmuPRNG: localQLAddress is %s", qlemuprng.localQLAddress)
// This reads random numbers from other Quantum end
udpSrvPort, err := net.ResolveUDPAddr("udp", qlemuprng.localQLAddress)
if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
log.Fatalf("QuantumlayerEmuPRNG: UDP failure: %s", err)
return
}
qlemuprng.udpSrvConn, err = net.ListenUDP("udp", udpSrvPort)
if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
log.Fatalf("QuantumlayerEmuPRNG: UDP failure: %s", err)
return
}
defer qlemuprng.udpSrvConn.Close()
@@ -124,20 +128,20 @@ func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
// Retrieve local UDP address and store it for further actions.
qlemuprng.qlLocalPort = qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr)
log.Printf("QuantumlayerEmuPRNG: started server, waiting for incoming rands on port %s \n", qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr).String())
log.Infof("QuantumlayerEmuPRNG: started server, waiting for incoming rands on port %s \n", qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr).String())
inBuffer := make([]byte, 1500)
for {
// Buffer for reading from "Quantum link"
n, addr, err := qlemuprng.udpSrvConn.ReadFromUDP(inBuffer)
if err != nil {
log.Printf("QuantumlayerEmuPRNG: Could not read from UDP: %s", err)
log.Errorf("QuantumlayerEmuPRNG: Could not read from UDP: %s", err)
} else {
log.Printf("QuantumlayerEmuPRNG: read %d bytes from %s\n", n, addr)
log.Debugf("QuantumlayerEmuPRNG: read %d bytes from %s\n", n, addr)
// Check if sender of datagram is qlPeer
// Warning this is not checking the validity of the sender, i.e., spoofing is possible
if addr.String() == qlemuprng.qlPeer {
log.Printf("QuantumlayerEmuPRNG: Peer %s listed", addr)
log.Debugf("QuantumlayerEmuPRNG: Peer %s listed", addr)
//dumb the received data into the channel and carry on
// TODO/XXX: no vetting for anything
// Unmarshall out of JSON
@@ -147,7 +151,7 @@ func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
qlemuprng.incomingRandNums <- inQBuffer
}
} else {
log.Printf("QuantumlayerEmuPRNG: Peer %s NOT listed", addr)
log.Infof("QuantumlayerEmuPRNG: Peer %s NOT listed", addr)
}
}
}
@@ -161,14 +165,14 @@ func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
// Ready, set, go!
qlemuprng.poweron = true
log.Println("QuantumlayerEmuPRNG is charged and powered on.")
log.Infof("QuantumlayerEmuPRNG: is charged and powered on.")
}
// Power off the quantum layer, i.e., close the communication ports for the
// other quantum module
func (qlemuprng *QuantumlayerEmuPRNG) PowerOff() {
qlemuprng.poweron = false
log.Println("QuantumlayerEmuPRNG is powered off...discharging.")
log.Println("QuantumlayerEmuPRNG: is powered off...discharging.")
}
func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr *net.UDPAddr) {
@@ -202,15 +206,16 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr *net.UDPAddr) {
// XXX/TODO: error must be handled
jsonPayload, err := json.Marshal(qpe)
if err != nil {
log.Printf("json.Marshal error %s", err)
log.Errorf("QuantumlayerEmuPRNG: json.Marshal error %s", err)
}
_, _, err = qlemuprng.udpSrvConn.WriteMsgUDP(jsonPayload, nil, addr)
if err != nil {
log.Fatalf("WriteMsgUDPAddrPort failed: %s", err)
log.Fatalf("QuantumlayerEmuPRNG: WriteMsgUDPAddrPort failed: %s", err)
}
qlemuprng.outgoingRandNums <- qpe
}
// TODO: This sleep timer has to replaced by something for clever.
time.Sleep(5 * time.Second)
}
}
@@ -312,7 +317,7 @@ func (store *NumberStore) GetBatch() (batch []byte) {
defer store.mu.Unlock()
if store.topOfStorage != 0 {
log.Println("Have Storage in my belly")
log.Debugf("QuantumlayerEmuPRNG: Have Storage in my belly")
}
// prepare to return full batch of numbers
batchReturn := make([]byte, store.topOfStorage)
Loading