github.com/Finschia/finschia-sdk@v0.48.1/x/simulation/log.go (about)

     1  package simulation
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path"
     7  	"time"
     8  )
     9  
    10  // log writter
    11  type LogWriter interface {
    12  	AddEntry(OperationEntry)
    13  	PrintLogs()
    14  }
    15  
    16  // LogWriter - return a dummy or standard log writer given the testingmode
    17  func NewLogWriter(testingmode bool) LogWriter {
    18  	if !testingmode {
    19  		return &DummyLogWriter{}
    20  	}
    21  
    22  	return &StandardLogWriter{}
    23  }
    24  
    25  // log writter
    26  type StandardLogWriter struct {
    27  	OpEntries []OperationEntry `json:"op_entries" yaml:"op_entries"`
    28  }
    29  
    30  // add an entry to the log writter
    31  func (lw *StandardLogWriter) AddEntry(opEntry OperationEntry) {
    32  	lw.OpEntries = append(lw.OpEntries, opEntry)
    33  }
    34  
    35  // PrintLogs - print the logs to a simulation file
    36  func (lw *StandardLogWriter) PrintLogs() {
    37  	f := createLogFile()
    38  	defer f.Close()
    39  
    40  	for i := 0; i < len(lw.OpEntries); i++ {
    41  		writeEntry := fmt.Sprintf("%s\n", (lw.OpEntries[i]).MustMarshal())
    42  		_, err := f.WriteString(writeEntry)
    43  		if err != nil {
    44  			panic("Failed to write logs to file")
    45  		}
    46  	}
    47  }
    48  
    49  func createLogFile() *os.File {
    50  	var f *os.File
    51  
    52  	fileName := fmt.Sprintf("%s.log", time.Now().Format("2006-01-02_15:04:05"))
    53  	folderPath := path.Join(os.ExpandEnv("$HOME"), ".simapp", "simulations")
    54  	filePath := path.Join(folderPath, fileName)
    55  
    56  	err := os.MkdirAll(folderPath, os.ModePerm)
    57  	if err != nil {
    58  		panic(err)
    59  	}
    60  
    61  	f, err = os.Create(filePath)
    62  	if err != nil {
    63  		panic(err)
    64  	}
    65  	fmt.Printf("Logs to writing to %s\n", filePath)
    66  
    67  	return f
    68  }
    69  
    70  // dummy log writter
    71  type DummyLogWriter struct{}
    72  
    73  // do nothing
    74  func (lw *DummyLogWriter) AddEntry(_ OperationEntry) {}
    75  
    76  // do nothing
    77  func (lw *DummyLogWriter) PrintLogs() {}