@startuml scale 600 width [*] --> TrackedOp : track() TrackedOp: setCycle(cycle) TrackedOp: setWaitTime(delay) TrackedOp: start() TrackedOp: TrackedOp: setData(data) TrackedOp: getData() TrackedOp: skip(reason) State InProtocol { TrackedOp --> StartedOp : start() StartedOp: getCycle() StartedOp: setData(data) StartedOp: getData() StartedOp: succeed(status) StartedOp: StartedOp: retry() StartedOp: fail(status) StartedOp: getStartedAtNanos() StartedOp: getCurrentServiceTimeNanos() StartedOp: getCurrentResponseTimeNanos() StartedOp -> StartedOp : retry() StartedOp --> SucceededOp : succeed() SucceededOp: getCycle() SucceededOp: getResult() SucceededOp: getTries() SucceededOp: getStartedAtNanos() SucceededOp: getServiceTimeNanos() SucceededOp: getResponseTimeNanos() StartedOp --> FailedOp: fail() FailedOp: getCycle() FailedOp: getResult() FailedOp: getTries() FailedOp: getStartedAtNanos() FailedOp: getServiceTimeNanos() FailedOp: getResponseTimeNanos() } TrackedOp --> SkippedOp : skip() SkippedOp: getSkippedReason() SkippedOp: SkippedOp: getCycle() SkippedOp: getResult() SkippedOp: getStartedAtNanos() SkippedOp: getData() SkippedOp: setData(data) SucceededOp --> [*] FailedOp --> [*] SkippedOp --> [*] @enduml