Something went wrong. Try again.
Monorepo for Tangled
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128package models
import ( "fmt" "regexp" "slices" "time"
"tangled.org/core/api/tangled"
"github.com/bluesky-social/indigo/atproto/syntax")
var ( re = regexp.MustCompile(`[^a-zA-Z0-9_.-]`))
type PipelineId struct { Knot string Rkey string}
func (p *PipelineId) AtUri() syntax.ATURI { return syntax.ATURI(fmt.Sprintf("at://did:web:%s/%s/%s", p.Knot, tangled.PipelineNSID, p.Rkey))}
type WorkflowId struct { PipelineId Name string}
func (wid WorkflowId) String() string { return fmt.Sprintf("%s-%s-%s", normalize(wid.Knot), wid.Rkey, normalize(wid.Name))}
func normalize(name string) string { normalized := re.ReplaceAllString(name, "-") return normalized}
type StatusKind string
var ( StatusKindPending StatusKind = "pending" StatusKindRunning StatusKind = "running" StatusKindFailed StatusKind = "failed" StatusKindTimeout StatusKind = "timeout" StatusKindCancelled StatusKind = "cancelled" StatusKindSuccess StatusKind = "success"
StartStates [2]StatusKind = [2]StatusKind{ StatusKindPending, StatusKindRunning, } FinishStates [4]StatusKind = [4]StatusKind{ StatusKindFailed, StatusKindTimeout, StatusKindCancelled, StatusKindSuccess, })
func (s StatusKind) String() string { return string(s)}
func (s StatusKind) IsStart() bool { return slices.Contains(StartStates[:], s)}
func (s StatusKind) IsFinish() bool { return slices.Contains(FinishStates[:], s)}
type LogKind string
var ( // step log data LogKindData LogKind = "data" // indicates status of a step LogKindControl LogKind = "control")
// step status indicator in control log linestype StepStatus string
var ( StepStatusStart StepStatus = "start" StepStatusEnd StepStatus = "end")
type LogLine struct { Kind LogKind `json:"kind"` Content string `json:"content"` Time time.Time `json:"time"` StepId int `json:"step_id"`
// fields if kind is "data" Stream string `json:"stream,omitempty"`
// fields if kind is "control" StepStatus StepStatus `json:"step_status,omitempty"` StepKind StepKind `json:"step_kind,omitempty"` StepCommand string `json:"step_command,omitempty"`}
func NewDataLogLine(idx int, content, stream string) LogLine { return LogLine{ Kind: LogKindData, Time: time.Now(), Content: content, StepId: idx, Stream: stream, }}
func NewControlLogLine(idx int, step Step, status StepStatus) LogLine { return LogLine{ Kind: LogKindControl, Time: time.Now(), Content: step.Name(), StepId: idx, StepStatus: status, StepKind: step.Kind(), StepCommand: step.Command(), }}