mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-30 03:01:17 +00:00
106 lines
3.1 KiB
Go
106 lines
3.1 KiB
Go
|
package services
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"time"
|
||
|
|
||
|
"github.com/mentos1386/zdravko/internal/temporal"
|
||
|
"go.temporal.io/api/enums/v1"
|
||
|
"go.temporal.io/api/workflowservice/v1"
|
||
|
"go.temporal.io/sdk/client"
|
||
|
)
|
||
|
|
||
|
type HookHistory struct {
|
||
|
HookId string
|
||
|
Status string
|
||
|
Duration time.Duration
|
||
|
StartTime time.Time
|
||
|
EndTime time.Time
|
||
|
WorkerGroupName string
|
||
|
Note string
|
||
|
}
|
||
|
|
||
|
func GetLastNHookHistory(ctx context.Context, t client.Client, n int32) ([]*HookHistory, error) {
|
||
|
var hookHistory []*HookHistory
|
||
|
|
||
|
response, err := t.ListWorkflow(ctx, &workflowservice.ListWorkflowExecutionsRequest{
|
||
|
PageSize: n,
|
||
|
})
|
||
|
if err != nil {
|
||
|
return hookHistory, err
|
||
|
}
|
||
|
|
||
|
executions := response.GetExecutions()
|
||
|
|
||
|
for _, execution := range executions {
|
||
|
scheduleId := string(execution.GetSearchAttributes().GetIndexedFields()["TemporalScheduledById"].Data)
|
||
|
|
||
|
// Remove the quotes around the hookId and the prefix.
|
||
|
hookId := scheduleId[len("\"hook-") : len(scheduleId)-1]
|
||
|
|
||
|
var result temporal.WorkflowHookResult
|
||
|
if execution.Status != enums.WORKFLOW_EXECUTION_STATUS_RUNNING {
|
||
|
workflowRun := t.GetWorkflow(ctx, execution.GetExecution().GetWorkflowId(), execution.GetExecution().GetRunId())
|
||
|
err := workflowRun.Get(ctx, &result)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
hookHistory = append(hookHistory, &HookHistory{
|
||
|
HookId: hookId,
|
||
|
Duration: execution.CloseTime.AsTime().Sub(execution.StartTime.AsTime()),
|
||
|
StartTime: execution.StartTime.AsTime(),
|
||
|
EndTime: execution.CloseTime.AsTime(),
|
||
|
Status: execution.Status.String(),
|
||
|
WorkerGroupName: execution.GetTaskQueue(),
|
||
|
Note: result.Note,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
return hookHistory, nil
|
||
|
}
|
||
|
|
||
|
func GetHookHistoryForHook(ctx context.Context, t client.Client, hookId string) ([]*HookHistory, error) {
|
||
|
var hookHistory []*HookHistory
|
||
|
|
||
|
response, err := t.ListWorkflow(ctx, &workflowservice.ListWorkflowExecutionsRequest{
|
||
|
PageSize: 10,
|
||
|
Query: fmt.Sprintf(`TemporalScheduledById = "%s"`, getScheduleId(hookId)),
|
||
|
})
|
||
|
if err != nil {
|
||
|
return hookHistory, err
|
||
|
}
|
||
|
|
||
|
executions := response.GetExecutions()
|
||
|
|
||
|
for _, execution := range executions {
|
||
|
scheduleId := string(execution.GetSearchAttributes().GetIndexedFields()["TemporalScheduledById"].Data)
|
||
|
|
||
|
// Remove the quotes around the hookId and the prefix.
|
||
|
hookId := scheduleId[len("\"hook-") : len(scheduleId)-1]
|
||
|
|
||
|
var result temporal.WorkflowHookResult
|
||
|
if execution.Status != enums.WORKFLOW_EXECUTION_STATUS_RUNNING {
|
||
|
workflowRun := t.GetWorkflow(ctx, execution.GetExecution().GetWorkflowId(), execution.GetExecution().GetRunId())
|
||
|
err := workflowRun.Get(ctx, &result)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
hookHistory = append(hookHistory, &HookHistory{
|
||
|
HookId: hookId,
|
||
|
Duration: execution.CloseTime.AsTime().Sub(execution.StartTime.AsTime()),
|
||
|
StartTime: execution.StartTime.AsTime(),
|
||
|
EndTime: execution.CloseTime.AsTime(),
|
||
|
Status: execution.Status.String(),
|
||
|
WorkerGroupName: execution.GetTaskQueue(),
|
||
|
Note: result.Note,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
return hookHistory, nil
|
||
|
}
|