@@ -33,14 +33,13 @@ var info = capabilities.MustNewCapabilityInfo(
3333)
3434
3535type capability struct {
36- services.StateMachine
36+ services.Service
37+ eng * services.Engine
38+
3739 capabilities.CapabilityInfo
3840 capabilities.Validator [config , inputs , requests.Response ]
3941
4042 reqHandler * requests.Handler
41- stopCh services.StopChan
42- wg sync.WaitGroup
43- lggr logger.Logger
4443
4544 requestTimeout time.Duration
4645 requestTimeoutLock sync.RWMutex
@@ -67,11 +66,8 @@ func NewCapability(s *requests.Store, clock clockwork.Clock, requestTimeout time
6766 o := & capability {
6867 CapabilityInfo : info ,
6968 Validator : capabilities.NewValidator [config , inputs , requests.Response ](capabilities.ValidatorArgs {Info : info }),
70- reqHandler : requests .NewHandler (lggr , s , clock , requestTimeout ),
7169 clock : clock ,
7270 requestTimeout : requestTimeout ,
73- stopCh : make (chan struct {}),
74- lggr : logger .Named (lggr , "OCR3CapabilityClient" ),
7571 aggregatorFactory : aggregatorFactory ,
7672 aggregators : map [string ]types.Aggregator {},
7773 encoderFactory : encoderFactory ,
@@ -80,39 +76,16 @@ func NewCapability(s *requests.Store, clock clockwork.Clock, requestTimeout time
8076 callbackChannelBufferSize : callbackChannelBufferSize ,
8177 registeredWorkflowsIDs : map [string ]bool {},
8278 }
79+ o .Service , o .eng = services.Config {
80+ Name : "OCR3CapabilityClient" ,
81+ NewSubServices : func (l logger.Logger ) []services.Service {
82+ o .reqHandler = requests .NewHandler (lggr , s , clock , requestTimeout )
83+ return []services.Service {o .reqHandler }
84+ },
85+ }.NewServiceEngine (lggr )
8386 return o
8487}
8588
86- func (o * capability ) Start (ctx context.Context ) error {
87- return o .StartOnce ("OCR3Capability" , func () error {
88- err := o .reqHandler .Start (ctx )
89- if err != nil {
90- return fmt .Errorf ("failed to start request handler: %w" , err )
91- }
92-
93- return nil
94- })
95- }
96-
97- func (o * capability ) Close () error {
98- return o .StopOnce ("OCR3Capability" , func () error {
99- close (o .stopCh )
100- o .wg .Wait ()
101- err := o .reqHandler .Close ()
102- if err != nil {
103- return fmt .Errorf ("failed to close request handler: %w" , err )
104- }
105-
106- return nil
107- })
108- }
109-
110- func (o * capability ) Name () string { return o .lggr .Name () }
111-
112- func (o * capability ) HealthReport () map [string ]error {
113- return map [string ]error {o .Name (): o .Healthy ()}
114- }
115-
11689func (o * capability ) RegisterToWorkflow (ctx context.Context , request capabilities.RegisterToWorkflowRequest ) error {
11790 c , err := o .ValidateConfig (request .Config )
11891 if err != nil {
@@ -121,13 +94,13 @@ func (o *capability) RegisterToWorkflow(ctx context.Context, request capabilitie
12194
12295 o .mu .Lock ()
12396 defer o .mu .Unlock ()
124- agg , err := o .aggregatorFactory (c .AggregationMethod , * c .AggregationConfig , o .lggr )
97+ agg , err := o .aggregatorFactory (c .AggregationMethod , * c .AggregationConfig , o .eng )
12598 if err != nil {
12699 return err
127100 }
128101 o .aggregators [request .Metadata .WorkflowID ] = agg
129102
130- encoder , err := o .encoderFactory (c .Encoder , c .EncoderConfig , o .lggr )
103+ encoder , err := o .encoderFactory (c .Encoder , c .EncoderConfig , o .eng )
131104 if err != nil {
132105 return err
133106 }
@@ -155,7 +128,7 @@ func (o *capability) GetEncoderByWorkflowID(workflowID string) (types.Encoder, e
155128}
156129
157130func (o * capability ) GetEncoderByName (encoderName string , config * values.Map ) (types.Encoder , error ) {
158- return o .encoderFactory (encoderName , config , o .lggr )
131+ return o .encoderFactory (encoderName , config , o .eng )
159132}
160133
161134func (o * capability ) GetRegisteredWorkflowsIDs () []string {
@@ -205,7 +178,7 @@ func (o *capability) Execute(ctx context.Context, r capabilities.CapabilityReque
205178 }
206179 err := r .Inputs .UnwrapTo (& m )
207180 if err != nil {
208- o .lggr .Warnf ("could not unwrap method from CapabilityRequest, using default: %v" , err )
181+ o .eng .Warnf ("could not unwrap method from CapabilityRequest, using default: %v" , err )
209182 }
210183
211184 switch m .Method {
@@ -214,10 +187,10 @@ func (o *capability) Execute(ctx context.Context, r capabilities.CapabilityReque
214187 if err != nil {
215188 return capabilities.CapabilityResponse {}, fmt .Errorf ("failed to create map for response inputs: %w" , err )
216189 }
217- o .lggr .Debugw ("Execute - sending response" , "workflowExecutionID" , r .Metadata .WorkflowExecutionID , "inputs" , inputs , "terminate" , m .Terminate )
190+ o .eng .Debugw ("Execute - sending response" , "workflowExecutionID" , r .Metadata .WorkflowExecutionID , "inputs" , inputs , "terminate" , m .Terminate )
218191 var responseErr error
219192 if m .Terminate {
220- o .lggr .Debugw ("Execute - terminating execution" , "workflowExecutionID" , r .Metadata .WorkflowExecutionID )
193+ o .eng .Debugw ("Execute - terminating execution" , "workflowExecutionID" , r .Metadata .WorkflowExecutionID )
221194 responseErr = capabilities .ErrStopExecution
222195 }
223196 out := requests.Response {
@@ -298,7 +271,7 @@ func (o *capability) queueRequestForProcessing(
298271 ExpiresAt : o .clock .Now ().Add (requestTimeout ),
299272 }
300273
301- o .lggr .Debugw ("Execute - adding to store" , "workflowID" , r .WorkflowID , "workflowExecutionID" , r .WorkflowExecutionID , "observations" , r .Observations )
274+ o .eng .Debugw ("Execute - adding to store" , "workflowID" , r .WorkflowID , "workflowExecutionID" , r .WorkflowExecutionID , "observations" , r .Observations )
302275
303276 o .reqHandler .SendRequest (ctx , r )
304277 return callbackCh , nil
0 commit comments