github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/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/onflow/flow-go/ledger"
    10  	"github.com/onflow/flow-go/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  	getBeforeMigrationSCFunc GetStateCommitmentFunc
    28  }
    29  
    30  func NewExportReporter(
    31  	logger zerolog.Logger,
    32  	getBeforeMigrationSCFunc GetStateCommitmentFunc,
    33  ) *ExportReporter {
    34  	return &ExportReporter{
    35  		logger:                   logger,
    36  		getBeforeMigrationSCFunc: getBeforeMigrationSCFunc,
    37  	}
    38  }
    39  
    40  func (e *ExportReporter) Name() string {
    41  	return "ExportReporter"
    42  }
    43  
    44  func (e *ExportReporter) Report(payload []ledger.Payload, commit ledger.State) error {
    45  	report := ExportReport{
    46  		EpochCounter:            0, // it will be overwritten by external automation, and this field will be removed later.
    47  		PreviousStateCommitment: e.getBeforeMigrationSCFunc(),
    48  		CurrentStateCommitment:  flow.StateCommitment(commit),
    49  		ReportSucceeded:         true,
    50  	}
    51  	file, _ := json.MarshalIndent(report, "", " ")
    52  	e.logger.
    53  		Info().
    54  		Str("ExportReport", string(file)).
    55  		Msg("Ledger Export has finished")
    56  	_ = os.WriteFile("export_report.json", file, 0644)
    57  	return nil
    58  }