github.com/koko1123/flow-go-1@v0.29.6/cmd/util/ledger/reporters/export_reporter.go (about)

     1  package reporters
     2  
     3  import (
     4  	"encoding/json"
     5  	"os"
     6  
     7  	"github.com/rs/zerolog"
     8  
     9  	"github.com/koko1123/flow-go-1/ledger"
    10  	"github.com/koko1123/flow-go-1/model/flow"
    11  )
    12  
    13  var _ ledger.Reporter = &ExportReporter{}
    14  
    15  type GetStateCommitmentFunc func() flow.StateCommitment
    16  
    17  type ExportReport struct {
    18  	EpochCounter            uint64
    19  	PreviousStateCommitment flow.StateCommitment
    20  	CurrentStateCommitment  flow.StateCommitment
    21  	ReportSucceeded         bool
    22  }
    23  
    24  // ExportReporter writes data that can be leveraged outside of extraction
    25  type ExportReporter struct {
    26  	logger                   zerolog.Logger
    27  	chain                    flow.Chain
    28  	getBeforeMigrationSCFunc GetStateCommitmentFunc
    29  }
    30  
    31  func NewExportReporter(
    32  	logger zerolog.Logger,
    33  	chain flow.Chain,
    34  	getBeforeMigrationSCFunc GetStateCommitmentFunc,
    35  ) *ExportReporter {
    36  	return &ExportReporter{
    37  		logger:                   logger,
    38  		chain:                    chain,
    39  		getBeforeMigrationSCFunc: getBeforeMigrationSCFunc,
    40  	}
    41  }
    42  
    43  func (e *ExportReporter) Name() string {
    44  	return "ExportReporter"
    45  }
    46  
    47  func (e *ExportReporter) Report(payload []ledger.Payload, commit ledger.State) error {
    48  	report := ExportReport{
    49  		EpochCounter:            0, // it will be overwritten by external automation, and this field will be removed later.
    50  		PreviousStateCommitment: e.getBeforeMigrationSCFunc(),
    51  		CurrentStateCommitment:  flow.StateCommitment(commit),
    52  		ReportSucceeded:         true,
    53  	}
    54  	file, _ := json.MarshalIndent(report, "", " ")
    55  	e.logger.
    56  		Info().
    57  		Str("ExportReport", string(file)).
    58  		Msg("Ledger Export has finished")
    59  	_ = os.WriteFile("export_report.json", file, 0644)
    60  	return nil
    61  }