@@ -30,9 +30,10 @@ type medianContract struct {
3030 configTracker types.ContractConfigTracker
3131 contractCaller * ocr2aggregator.OCR2AggregatorCaller
3232 requestRoundTracker * round.RequestRoundTracker
33+ onchainViewMetrics * medianOnchainViewMetrics
3334}
3435
35- func newMedianContract (configTracker types.ContractConfigTracker , contractAddress common.Address , chain legacyevm.Chain , jobID int32 , oracleSpecID int32 , ds sqlutil.DataSource , lggr logger.Logger ) (* medianContract , error ) {
36+ func newMedianContract (configTracker types.ContractConfigTracker , contractAddress common.Address , chain legacyevm.Chain , jobID int32 , oracleSpecID int32 , ds sqlutil.DataSource , lggr logger.Logger , transmitterID string ) (* medianContract , error ) {
3637 lggr = logger .Named (lggr , "MedianContract" )
3738 contract , err := offchain_aggregator_wrapper .NewOffchainAggregator (contractAddress , chain .Client ())
3839 if err != nil {
@@ -50,9 +51,10 @@ func newMedianContract(configTracker types.ContractConfigTracker, contractAddres
5051 }
5152
5253 return & medianContract {
53- lggr : lggr ,
54- configTracker : configTracker ,
55- contractCaller : contractCaller ,
54+ lggr : lggr ,
55+ configTracker : configTracker ,
56+ contractCaller : contractCaller ,
57+ onchainViewMetrics : newMedianOnchainViewMetrics (chain .ID ().String (), contractAddress .Hex (), transmitterID ),
5658 requestRoundTracker : round .NewRequestRoundTracker (
5759 contract ,
5860 contractFilterer ,
@@ -87,7 +89,14 @@ func (oc *medianContract) HealthReport() map[string]error {
8789func (oc * medianContract ) LatestTransmissionDetails (ctx context.Context ) (ocrtypes.ConfigDigest , uint32 , uint8 , * big.Int , time.Time , error ) {
8890 opts := bind.CallOpts {Context : ctx , Pending : false }
8991 result , err := oc .contractCaller .LatestTransmissionDetails (& opts )
90- return result .ConfigDigest , result .Epoch , result .Round , result .LatestAnswer , time .Unix (int64 (result .LatestTimestamp ), 0 ), errors .Wrap (err , "error getting LatestTransmissionDetails" )
92+ if err != nil {
93+ return ocrtypes.ConfigDigest {}, 0 , 0 , nil , time.Time {}, errors .Wrap (err , "error getting LatestTransmissionDetails" )
94+ }
95+ updatedAt := time .Unix (int64 (result .LatestTimestamp ), 0 )
96+ if oc .onchainViewMetrics != nil {
97+ oc .onchainViewMetrics .record (result .LatestAnswer , result .Epoch , result .Round , updatedAt )
98+ }
99+ return result .ConfigDigest , result .Epoch , result .Round , result .LatestAnswer , updatedAt , nil
91100}
92101
93102// LatestRoundRequested returns the configDigest, epoch, and round from the latest
0 commit comments