mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-25 08:58:50 +00:00
105 lines
3.1 KiB
Go
105 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
|
|
}
|