Packages
step_flow
1.3.0-rc
1.9.0-rc2
1.9.0-rc1
1.9.0-rc0
1.8.2
1.8.1
1.8.1-rc8
1.8.1-rc7
1.8.1-rc6
1.8.1-rc5
1.8.1-rc4
1.8.1-rc3
1.8.1-rc2
1.8.1-rc1
1.8.1-rc0
1.8.0
1.8.0-rc3
1.8.0-rc2
1.8.0-rc1
1.8.0-rc0
1.7.3
1.7.3-rc4
1.7.3-rc3
1.7.3-rc2
1.7.3-rc1
1.7.3-rc0
1.7.2
1.7.2-rc4
1.7.2-rc3
1.7.2-rc2
1.7.2-rc1
1.7.2-rc0
1.7.1
1.7.0
1.7.0-rc1
1.7.0-rc0
1.6.1
1.6.1-rc1
1.6.1-rc0
1.6.0
1.6.0-rc9
1.6.0-rc8
1.6.0-rc7
1.6.0-rc6
1.6.0-rc5
1.6.0-rc4
1.6.0-rc3
1.6.0-rc20
1.6.0-rc2
1.6.0-rc19
1.6.0-rc18
1.6.0-rc17
1.6.0-rc16
1.6.0-rc15
1.6.0-rc14
1.6.0-rc13
1.6.0-rc12
1.6.0-rc11
1.6.0-rc10
1.6.0-rc1
1.5.0
1.5.0-rc1
1.4.2-rc2
1.4.2-rc1
1.4.1
1.4.1-rc1
1.4.0
1.4.0-rc4
1.4.0-rc3
1.4.0-rc2
1.4.0-rc1
1.3.1
1.3.0
1.3.0-rc
1.2.0
1.1.0
1.0.0
1.0.0-rc9
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.4
0.0.3
0.0.2
0.0.1
Step flow manager for Elixir applications
Current section
Files
Jump to
Current section
Files
lib/step_flow/view/workflow_view.ex
defmodule StepFlow.WorkflowView do
use StepFlow, :view
alias StepFlow.{ArtifactView, JobView, RightView, WorkflowStatusView, WorkflowView}
require Logger
def render("index.json", %{workflows: %{data: workflows, total: total}}) do
%{
data: render_many(workflows, WorkflowView, "workflow_full.json"),
total: total
}
end
def render("show.json", %{workflow: workflow, mode: mode}) do
%{data: render_one(workflow, WorkflowView, "workflow_#{mode}.json")}
end
def render("created.json", %{workflow: workflow}) do
%{data: render_one(workflow, WorkflowView, "workflow_created.json")}
end
def render("workflow_full.json", %{workflow: workflow}) do
result = %{
schema_version: workflow.schema_version,
id: workflow.id,
identifier: workflow.identifier,
is_live: workflow.is_live,
version_major: workflow.version_major,
version_minor: workflow.version_minor,
version_micro: workflow.version_micro,
tags: workflow.tags,
reference: workflow.reference,
steps: workflow.steps,
parameters: workflow.parameters,
created_at: workflow.inserted_at,
user_uuid: workflow.user_uuid
}
result =
if is_list(workflow.artifacts) do
artifacts = render_many(workflow.artifacts, ArtifactView, "artifact.json")
Map.put(result, :artifacts, artifacts)
else
result
end
result =
if is_list(workflow.jobs) do
jobs = render_many(workflow.jobs, JobView, "job.json")
Map.put(result, :jobs, jobs)
else
result
end
if is_list(workflow.rights) do
rights = render_many(workflow.rights, RightView, "right.json")
Map.put(result, :rights, rights)
else
result
end
end
def render("workflow_simple.json", %{workflow: workflow}) do
result = %{
schema_version: workflow.schema_version,
id: workflow.id,
identifier: workflow.identifier,
is_live: workflow.is_live,
version_major: workflow.version_major,
version_minor: workflow.version_minor,
version_micro: workflow.version_micro,
created_at: workflow.inserted_at,
user_uuid: workflow.user_uuid
}
if is_list(workflow.status) do
last_status =
workflow.status
|> Enum.sort_by(fn s -> {s.inserted_at, s.id} end)
|> List.last()
state = render_one(last_status, WorkflowStatusView, "state.json")
Map.put(result, :status, state)
else
result
end
end
def render("workflow_created.json", %{workflow: workflow}) do
%{
schema_version: workflow.schema_version,
id: workflow.id,
identifier: workflow.identifier,
version_major: workflow.version_major,
version_minor: workflow.version_minor,
version_micro: workflow.version_micro,
tags: workflow.tags,
reference: workflow.reference,
parameters: workflow.parameters,
created_at: workflow.inserted_at,
user_uuid: workflow.user_uuid
}
end
def render("statistics.json", %{workflows_status: []}) do
%{
data: %{
processing: 0,
error: 0,
completed: 0,
pending: 0,
bins: []
}
}
end
def render("statistics.json", %{
workflows_status: workflows_status,
time_interval: time_interval,
end_date: end_date
}) do
%{
data: %{
processing:
workflows_status
|> Enum.filter(fn s -> s.state == :processing end)
|> length(),
error:
workflows_status
|> Enum.filter(fn s -> s.state == :error end)
|> length(),
completed:
workflows_status
|> Enum.filter(fn s -> s.state == :completed end)
|> length(),
pending:
workflows_status
|> Enum.filter(fn s -> s.state == :pending end)
|> length(),
bins:
workflows_status
|> Enum.group_by(fn s ->
NaiveDateTime.diff(end_date, s.inserted_at, :second)
|> Kernel.div(time_interval)
end)
|> Enum.map(fn {bin, group} ->
%{
bin: bin,
start_date:
NaiveDateTime.add(end_date, -(bin + 1) * time_interval, :second)
|> NaiveDateTime.to_string(),
end_date:
NaiveDateTime.add(end_date, -bin * time_interval, :second)
|> NaiveDateTime.to_string(),
processing:
group
|> Enum.filter(fn s -> s.state == :processing end)
|> length(),
error:
group
|> Enum.filter(fn s -> s.state == :error end)
|> length(),
completed:
group
|> Enum.filter(fn s -> s.state == :completed end)
|> length(),
pending:
group
|> Enum.filter(fn s -> s.state == :pending end)
|> length()
}
end)
}
}
end
end