@@ -7,6 +7,7 @@ use std::sync::Arc;
77use async_graphql:: { Context , EmptyMutation , EmptySubscription , Object , Schema , SimpleObject } ;
88use async_graphql_axum:: { GraphQLRequest , GraphQLResponse } ;
99use axum:: extract:: State ;
10+ use indexer_common:: tap:: CostModelSource ;
1011use serde:: { Deserialize , Serialize } ;
1112use serde_json:: Value ;
1213use thegraph:: types:: DeploymentId ;
@@ -21,6 +22,16 @@ pub struct GraphQlCostModel {
2122 pub variables : Option < Value > ,
2223}
2324
25+ impl From < CostModel > for CostModelSource {
26+ fn from ( value : CostModel ) -> Self {
27+ Self {
28+ deployment_id : value. deployment ,
29+ model : value. model . unwrap_or_default ( ) ,
30+ variables : value. variables . unwrap_or_default ( ) . to_string ( ) ,
31+ }
32+ }
33+ }
34+
2435impl From < CostModel > for GraphQlCostModel {
2536 fn from ( model : CostModel ) -> Self {
2637 Self {
@@ -45,8 +56,20 @@ impl Query {
4556 . into_iter ( )
4657 . map ( |s| DeploymentId :: from_str ( & s) )
4758 . collect :: < Result < Vec < DeploymentId > , _ > > ( ) ?;
48- let pool = & ctx. data_unchecked :: < Arc < SubgraphServiceState > > ( ) . database ;
59+ let state = & ctx. data_unchecked :: < Arc < SubgraphServiceState > > ( ) ;
60+
61+ let cost_model_sender = & state. value_check_sender ;
62+
63+ let pool = & state. database ;
4964 let cost_models = database:: cost_models ( pool, & deployment_ids) . await ?;
65+
66+ for model in & cost_models {
67+ let _ = cost_model_sender
68+ . tx_cost_model
69+ . send ( CostModelSource :: from ( model. clone ( ) ) )
70+ . await ;
71+ }
72+
5073 Ok ( cost_models. into_iter ( ) . map ( |m| m. into ( ) ) . collect ( ) )
5174 }
5275
@@ -56,10 +79,20 @@ impl Query {
5679 deployment : String ,
5780 ) -> Result < Option < GraphQlCostModel > , anyhow:: Error > {
5881 let deployment_id = DeploymentId :: from_str ( & deployment) ?;
82+
83+ let state = & ctx. data_unchecked :: < Arc < SubgraphServiceState > > ( ) ;
84+ let cost_model_sender = & state. value_check_sender ;
5985 let pool = & ctx. data_unchecked :: < Arc < SubgraphServiceState > > ( ) . database ;
60- database:: cost_model ( pool, & deployment_id)
61- . await
62- . map ( |model_opt| model_opt. map ( GraphQlCostModel :: from) )
86+ let model = database:: cost_model ( pool, & deployment_id) . await ?;
87+
88+ if let Some ( model) = & model {
89+ let _ = cost_model_sender
90+ . tx_cost_model
91+ . send ( CostModelSource :: from ( model. clone ( ) ) )
92+ . await ;
93+ }
94+
95+ Ok ( model. map ( GraphQlCostModel :: from) )
6396 }
6497}
6598
0 commit comments