Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1b0c2bf
Add issue status changelog definition
ambolt314 Sep 3, 2026
aaa3a3d
Clean ingested changelog data
ambolt314 Sep 3, 2026
3b12e25
corrected staging yml file for expected sql
ambolt314 Sep 3, 2026
2585b8d
Initial presentation of data in mart for time in each status. TODO: c…
ambolt314 Sep 3, 2026
fdca41d
rename file for specific board
ambolt314 Sep 4, 2026
ee0bbbf
chore(airflow): implementing uv cache within airflow setup (#457)
mehta-pooja123 Sep 3, 2026
df1a619
feat(elt-pipelines): Add issue status changelog method to Jira pipeli…
ambolt314 Sep 4, 2026
09cccef
feat(elt-pipelines): Proposal postgresql sources pipeline (#396)
bashanlam Sep 4, 2026
e889c3a
corrected table name
ambolt314 Sep 4, 2026
4566708
add correct sql to retrieve status time information. TODO: handle spe…
ambolt314 Sep 4, 2026
d35b806
extract time status logic into intermediate group; present report-spe…
ambolt314 Sep 4, 2026
6dc6e00
Add user software board
ambolt314 Sep 4, 2026
288aa07
Add data driven facility to mart
ambolt314 Sep 4, 2026
7666d1c
corrected errors in user software status retrieval
ambolt314 Sep 4, 2026
008c5a4
add computing infrastructure to mart
ambolt314 Sep 4, 2026
adb2d3d
Refactor scientific software to retrieve correct fields, alphabetically
ambolt314 Sep 4, 2026
2628606
filter correct data based on issue keys
ambolt314 Sep 4, 2026
e409888
Merge branch 'main' into 450_time_in_status_transform
ambolt314 Sep 4, 2026
9b80c20
specify refreshment of table data, referencing https://github.com/ISI…
ambolt314 Sep 7, 2026
31db429
Align nomenclature in schemas, referencing https://github.com/ISISNeu…
ambolt314 Sep 7, 2026
c226d10
remove trailing comma, referencing https://github.com/ISISNeutronMuon…
ambolt314 Sep 7, 2026
0471162
feat(elt-common): Add .env configuration loading (#465)
WHTaylor Sep 8, 2026
018fcec
feat(elt-pipelines): Port opralogweb to elt-pipelines (#462)
ambolt314 Sep 8, 2026
56fd8ae
:us: Americanized spelling, referencing https://github.com/ISISNeutro…
ambolt314 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions elt-common/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ dependencies = [
"pydantic>=2.13.4",
"dbt-core>=1.12.0",
"dbt-trino>=1.10.3",
"python-dotenv>=1.2.2",
]


Expand Down
3 changes: 3 additions & 0 deletions elt-common/src/elt_common/ingest.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import pyarrow as pa
import pyarrow.compute as pc
from dotenv import load_dotenv, find_dotenv
Comment thread
martyngigg marked this conversation as resolved.
from pyiceberg.exceptions import NoSuchTableError

from elt_common.extract import (
Expand All @@ -29,6 +30,8 @@
def run_ingest(job: ELTIngestManifest) -> dict[str, int]:
"""Import the extract function, call it, and write results to Iceberg."""

load_dotenv(find_dotenv(usecwd=True), verbose=True)

# Create the object that will do the extraction.
# Environment variables for the object's configuration must have been set
# before reaching here.
Expand Down
5 changes: 2 additions & 3 deletions elt-common/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion elt-pipelines/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@ Pipelines are run using the `elt` CLI tool. As an example, with `elt-pipelines`
connection, so configuration follows [their approach](https://py.iceberg.apache.org/configuration/). See
the [getting started guide](../docs-devel/getting-started.md#configure-iceberg-connection) for the local configuration
values
- Any pipelines that include a `config_cls` require/have optional configuration values to be set
- Any pipelines that include a `config_cls` require/have optional configuration values
- These use [`pydantic_settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/)
- Environment variables are used to set the values. The name of the variable(s) must be prefixed with
`<JOB_NAME>__`, where `<JOB_NAME>` is the name of the pipeline
- Values for variables can also be specified in a `.env` file in the working directory. If a value is present both
in the `.env` file and as an environment variable, the environment variable is preferred

## Writing a pipeline

Expand Down
2 changes: 1 addition & 1 deletion elt-pipelines/facility_ops/ingest/computing/jira/jira.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def extract_resource_properties(self) -> Iterator[tuple[str, ResourceProperties]
),
)
yield (
"issue_status_changelog",
"issue_status_changelogs",
ResourceProperties(
extractor=self.extract_issue_status_changelogs,
write_properties=ResourceWriteProperties(write_mode="replace"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
-- Get the differences between the status. No need for final status, so this query is perfectly suitable
with status_to_from as (
select
issue_key,
from_status as status,
lag(changed_at) over (partition by issue_key order by changed_at) as status_from,
changed_at as status_to
Comment thread
martyngigg marked this conversation as resolved.
from {{ ref('stg_jira_issue_status_changelogs') }} as changelogs
),

-- Populate null values of status from with the issue creation date. Join required
nn_status_to_from as (
select
status_to_from.issue_key,
status_to_from.status,
COALESCE(status_to_from.status_from, issues.created) as status_from,
status_to_from.status_to
from status_to_from
inner join facility_ops_landing.computing_jira.isis_jira_issues as issues
on status_to_from.issue_key = issues.issue_key
),

-- Subtract to and from date
status_durations as (
select
issue_key,
status,
date_diff('second', status_from, status_to) as status_duration
from nn_status_to_from
),

-- Aggregate similar statuses and add their durations
times_in_status as (
select
issue_key,
status,
sum(status_duration) as time_in_status
from status_durations
group by issue_key,
status
)

select * from times_in_status
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{{
config(
on_table_exists = 'drop'
)
}}

with times_in_status as (
Comment thread
ambolt314 marked this conversation as resolved.
select * from {{ ref('int_times_in_status') }} where issue_key like 'CI-%'
),

time_in_status_data_driven_facility as (
select
issue_key,
MAX(
Comment thread
martyngigg marked this conversation as resolved.
case
when status = 'analyzing' then time_in_status
else null
end
) as time_in_analyzing_secs,
MAX(
case
when status = 'backlog' then time_in_status
else null
end
) as time_in_backlog_secs,
MAX(
case
when status = 'done' then time_in_status
else null
end
) as time_in_done_secs,
MAX(
case
when status = 'funnel' then time_in_status
else null
end
) as time_in_funnel_secs,
MAX(
case
when status = 'implementing' then time_in_status
else null
end
) as time_in_implementing_secs,
MAX(
case
when status = 'implementing (mvp)' then time_in_status
else null
end
) as time_in_implementing_mvp_secs,
MAX(
case
when status = 'implementing (persevere)' then time_in_status
else null
end
) as time_in_implementing_persevere_secs,
MAX(
case
when status = 'in progress' then time_in_status
else null
end
) as time_in_in_progress_secs,
MAX(
case
when status = 'portfolio backlog' then time_in_status
else null
end
) as time_in_portfolio_backlog_secs,
MAX(
case
when status = 'ready' then time_in_status
else null
end
) as time_in_ready_secs,
MAX(
case
when status = 'reviewing' then time_in_status
else null
end
) as time_in_reviewing_secs
from times_in_status
group by issue_key

)
select * from time_in_status_data_driven_facility
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
models:
- name: time_in_status_computing_infrastructure
description: >
Get length of time a Computing Infrastructure issue spends in each status for user software issues.
columns:
- name: issue_key
data_tests:
- not_null
- name: time_in_analyzing_secs
- name: time_in_backlog_secs
- name: time_in_done_secs
- name: time_in_funnel_secs
- name: time_in_implementing_secs
- name: time_in_implementing_mvp_secs
- name: time_in_implementing_persevere_secs
- name: time_in_in_progress_secs
- name: time_in_portfolio_backlog_secs
- name: time_in_ready_secs
- name: time_in_reviewing_secs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{{
config(
on_table_exists = 'drop'
)
}}

with times_in_status as (
select * from {{ ref('int_times_in_status') }} where issue_key like 'DD-%'
),

time_in_status_data_driven_facility as (
select
issue_key,
MAX(
case
when status = 'analyzing' then time_in_status
else null
end
) as time_in_analyzing_secs,
MAX(
case
when status = 'backlog' then time_in_status
else null
end
) as time_in_backlog_secs,
MAX(
case
when status = 'done' then time_in_status
else null
end
) as time_in_done_secs,
MAX(
case
when status = 'funnel' then time_in_status
else null
end
) as time_in_funnel_secs,
MAX(
case
when status = 'implementing' then time_in_status
else null
end
) as time_in_implementing_secs,
MAX(
case
when status = 'implementing (mvp)' then time_in_status
else null
end
) as time_in_implementing_mvp_secs,
MAX(
case
when status = 'implementing (persevere)' then time_in_status
else null
end
) as time_in_implementing_persevere_secs,
MAX(
case
when status = 'in progress' then time_in_status
else null
end
) as time_in_in_progress_secs,
MAX(
case
when status = 'portfolio backlog' then time_in_status
else null
end
) as time_in_portfolio_backlog_secs,
MAX(
case
when status = 'ready' then time_in_status
else null
end
) as time_in_ready_secs,
MAX(
case
when status = 'reviewing' then time_in_status
else null
end
) as time_in_reviewing_secs,
MAX(
case
when status = 'selected for development' then time_in_status
else null
end
) as time_in_selected_for_development_secs
from times_in_status
group by issue_key

)
select * from time_in_status_data_driven_facility
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
models:
- name: time_in_status_data_driven_facility
description: >
Get length of time a Data-Driven Facility issue spends in each status for user software issues.
columns:
- name: issue_key
data_tests:
- not_null
- name: time_in_analyzing_secs
- name: time_in_backlog_secs
- name: time_in_done_secs
- name: time_in_funnel_secs
- name: time_in_implementing_secs
- name: time_in_implementing_mvp_secs
- name: time_in_implementing_persevere_secs
- name: time_in_in_progress_secs
- name: time_in_portfolio_backlog_secs
- name: time_in_ready_secs
- name: time_in_reviewing_secs
- name: time_in_selected_for_development_secs
Loading
Loading