Skip to content

Instantly share code, notes, and snippets.

@chuckwondo
Last active June 12, 2024 17:43
Show Gist options
  • Save chuckwondo/6a731811226bad18523f595da9ef5697 to your computer and use it in GitHub Desktop.
Save chuckwondo/6a731811226bad18523f595da9ef5697 to your computer and use it in GitHub Desktop.
DPS Job Metrics

DPS Job Metrics

Simple Jupyter notebook to enable analysis of DPS Jobs.

To use the notebook, do the following (this assumes conda is installed):

  1. Run conda env update to create/update the environment described in environment.yml.
  2. Run conda activate dps-metrics to activate the environment.
  3. Run python -m ipykernel install --user --name dps-metrics --display-name "DPS Metrics" to install a Jupyter kernel based upon the environment.

When you open dps_metrics.ipynb choose the kernel DPS Metrics before running the cells.

Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "a166bab6-d291-473b-b0fc-622b39074ee8",
"metadata": {},
"source": [
"# DPS Job Metrics"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7cbcd181-1268-4d71-ba07-3b2662f37d9b",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import duckdb\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"id": "6a623b53-b659-4fe5-80fb-84d047650bd9",
"metadata": {},
"source": [
"# Select all DPS Metrics Files from S3\n",
"\n",
"We're using DuckDB to select all of the available DPS job metrics CSV files, primarily because it makes it quite straightforward to \"glob\" them all. This means we don't have to write any logic to traverse through the S3 bucket to locate all of the CSV files.\n",
"\n",
"It also makes it fairly easy to convert some oddly formatted values into the types we want to use."
]
},
{
"cell_type": "markdown",
"id": "75eaabfe-1245-45db-ad46-172c4e17b855",
"metadata": {},
"source": [
"We must first create a connection to an in-memory DuckDB instance:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "5a0b4540-8fcf-4ed5-9c3e-456ef6847e89",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"con = duckdb.connect()"
]
},
{
"cell_type": "markdown",
"id": "5455622c-6ccf-4806-b16d-ecea11cab72c",
"metadata": {},
"source": [
"Now we can query all of the CSV files of interest, do some data type conversions, and convert the DuckDB query results directly to a Pandas DataFrame. Note that we ignore files prior to May 2024 because March and April are incomplete:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d4fec818-dc6b-41e7-b79a-6dbcf81e1719",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"job_metrics_df = (\n",
" con.execute(\n",
" \"\"\"\n",
" SELECT\n",
" algorithm,\n",
" tag,\n",
" id,\n",
" queued_datetime,\n",
" start_datetime,\n",
" end_datetime,\n",
" cast(replace(execution_time_secs, ',', '') as DOUBLE) AS execution_time_secs,\n",
" cast(replace(dir_size, ',', '') as BIGINT) AS dir_size,\n",
" queue,\n",
" status,\n",
" FROM read_csv(\n",
" 's3://maap-ops-workspace/reports/24/*/*.csv',\n",
" union_by_name=true,\n",
" header=true,\n",
" names=[\n",
" 'timestamp',\n",
" 'id',\n",
" 'algorithm',\n",
" 'tag',\n",
" 'cmd_time_secs',\n",
" 'execution_time_secs',\n",
" 'dir_size',\n",
" 'queue',\n",
" 'status',\n",
" 'queued_datetime',\n",
" 'start_datetime',\n",
" 'end_datetime',\n",
" ],\n",
" types={\n",
" 'timestamp': 'TIMESTAMP',\n",
" 'status': 'INTEGER',\n",
" 'queued_datetime': 'TIMESTAMP',\n",
" 'start_datetime': 'TIMESTAMP',\n",
" 'end_datetime': 'TIMESTAMP',\n",
" },\n",
" timestampformat='%b %-d, %Y @ %H:%M:%S.%g'\n",
" )\n",
" WHERE timestamp >= '2024-05-01 00:00:00'\n",
" ORDER BY start_datetime\n",
" \"\"\"\n",
" )\n",
" .df()\n",
" .set_index(\"id\", drop=True)\n",
" .assign(execution_time_hrs=lambda df: df.execution_time_secs / 3600)\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "27cdc9d7-47fc-4f09-96c6-939ac8f3601e",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"algorithm object\n",
"tag object\n",
"queued_datetime datetime64[us]\n",
"start_datetime datetime64[us]\n",
"end_datetime datetime64[us]\n",
"execution_time_secs float64\n",
"dir_size int64\n",
"queue object\n",
"status int32\n",
"execution_time_hrs float64\n",
"dtype: object"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"job_metrics_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "de685704-b175-4392-9b84-7c1e6c9bfca2",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"job-cardamom:main\n",
"job-dps-impersonation-test-s3:s3\n",
"job-dps_tutorial_graceal:main\n",
"job-eis-feds-dask-coordinator-v3:1.0.0\n",
"job-eis-fire-borealna-nrt_largefire:eli_global_boreal_largefire_only\n",
"job-eis-fire-borealna-nrt_snap:eli_global_boreal_snap_only\n",
"job-eis-fire-feds-dps-data-checker-v2:conus-dps\n",
"job-eis-fire-feds-nrt-dask-dps-v2:conus-dps\n",
"job-gedi-subset:0.6.2\n",
"job-gedi-subset:0.7.0\n",
"job-gedi-subset:0.7.0-all-cpus\n",
"job-gedi-subset:0.7.1\n",
"job-gedi-subset:issue14-auto-refresh-s3-creds\n",
"job-gedi-subset:issue54-direct-s3-read\n",
"job-gedi-subset:s3fs-tuning\n",
"job-ich-0.1.1:main\n",
"job-lw-mozart-purge:v1.2.2\n",
"job-lw-mozart-retry:v1.2.2\n",
"job-lw-mozart-revoke:v1.2.2\n",
"job-rob_test_registration_2406b:main\n",
"job-run_GMBpredictions_MEX:GMBpredictions_v1\n",
"job-run_GMBpredictions_MEX:main\n",
"job-run_boreal_biomass_map:boreal_agb_2024_v5\n",
"job-run_boreal_biomass_map:boreal_agb_2024_v6\n",
"job-test-algorithm-graceal:main\n"
]
}
],
"source": [
"for algorithm in sorted(job_metrics_df.algorithm.unique()):\n",
" print(algorithm)"
]
},
{
"cell_type": "markdown",
"id": "232107aa-c232-4f9a-9beb-ab973e366947",
"metadata": {},
"source": [
"Select the jobs of interest. Note that this can be achieved directly in the query above. In particular, we could have instead constructed the `WHERE` clause above as follows:\n",
"\n",
"```sql\n",
"WHERE algorithm LIKE '%-eis-%'\n",
"AND timestamp >= '2024-05-01 00:00:00'\n",
"```\n",
"\n",
"In that case, the following selection could not only be eliminated, but also adding the condition to the `WHERE` clause would reduce the memory requirements.\n",
"\n",
"However, on the other hand, by performing the selection below, we can modify the selection without the need to re-scan all of the CSV files in S3, which is much slower."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a47676d9-abd8-415c-a14f-57c2e4546b77",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>algorithm</th>\n",
" <th>tag</th>\n",
" <th>queued_datetime</th>\n",
" <th>start_datetime</th>\n",
" <th>end_datetime</th>\n",
" <th>execution_time_secs</th>\n",
" <th>dir_size</th>\n",
" <th>queue</th>\n",
" <th>status</th>\n",
" <th>execution_time_hrs</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>apfQWI8BTOILTbmxMgPH</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-05-08 06:13:34.671</td>\n",
" <td>2024-05-08 06:20:28.163</td>\n",
" <td>2024-05-08 06:25:00.184</td>\n",
" <td>272.021</td>\n",
" <td>42446</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.075561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>bZfQWI8BTOILTbmxMgPH</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-05-08 06:26:56.936</td>\n",
" <td>2024-05-08 06:26:56.952</td>\n",
" <td>2024-05-08 06:27:45.268</td>\n",
" <td>48.316</td>\n",
" <td>42446</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.013421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cZfQWI8BTOILTbmxMgPH</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-05-08 06:36:30.335</td>\n",
" <td>2024-05-08 06:36:30.351</td>\n",
" <td>2024-05-08 06:37:19.601</td>\n",
" <td>49.250</td>\n",
" <td>42446</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.013681</td>\n",
" </tr>\n",
" <tr>\n",
" <th>dpfQWI8BTOILTbmxMgPH</th>\n",
" <td>job-eis-fire-feds-nrt-dask-dps-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-nrt-dask-dps-v2:conus-dps</td>\n",
" <td>2024-05-08 06:47:56.367</td>\n",
" <td>2024-05-08 06:47:56.382</td>\n",
" <td>2024-05-08 06:51:40.769</td>\n",
" <td>224.387</td>\n",
" <td>29676</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.062330</td>\n",
" </tr>\n",
" <tr>\n",
" <th>d5fQWI8BTOILTbmxMgPH</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-05-08 06:49:19.460</td>\n",
" <td>2024-05-08 06:51:51.971</td>\n",
" <td>2024-05-08 06:52:38.246</td>\n",
" <td>46.274</td>\n",
" <td>42406</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.012854</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Ny1aCZABTOILTbmxL26n</th>\n",
" <td>job-eis-fire-borealna-nrt_snap:eli_global_bore...</td>\n",
" <td>job-eis-fire-borealna-nrt_snap:eli_global_bore...</td>\n",
" <td>2024-06-11 21:55:06.356</td>\n",
" <td>2024-06-11 22:04:37.539</td>\n",
" <td>2024-06-11 22:10:10.982</td>\n",
" <td>333.443</td>\n",
" <td>28697</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.092623</td>\n",
" </tr>\n",
" <tr>\n",
" <th>WC1dCZABTOILTbmxMHE3</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-06-11 22:11:14.407</td>\n",
" <td>2024-06-11 22:11:14.436</td>\n",
" <td>2024-06-11 22:13:29.328</td>\n",
" <td>134.892</td>\n",
" <td>28751</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.037470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>fC1_CZABTOILTbmxD5SC</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-06-11 22:27:16.705</td>\n",
" <td>2024-06-11 22:45:26.077</td>\n",
" <td>2024-06-11 22:50:27.634</td>\n",
" <td>301.557</td>\n",
" <td>28751</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.083766</td>\n",
" </tr>\n",
" <tr>\n",
" <th>rS2ACZABTOILTbmxNZXW</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-06-11 22:35:23.161</td>\n",
" <td>2024-06-11 22:50:40.182</td>\n",
" <td>2024-06-11 22:51:44.396</td>\n",
" <td>64.215</td>\n",
" <td>28751</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.017838</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ui2BCZABTOILTbmxMZYj</th>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>job-eis-fire-feds-dps-data-checker-v2:conus-dps</td>\n",
" <td>2024-06-11 22:49:42.530</td>\n",
" <td>2024-06-11 22:51:55.557</td>\n",
" <td>2024-06-11 22:52:48.786</td>\n",
" <td>53.228</td>\n",
" <td>28751</td>\n",
" <td>maap-dps-eis-worker-64gb</td>\n",
" <td>0</td>\n",
" <td>0.014786</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2087 rows × 10 columns</p>\n",
"</div>"
],
"text/plain": [
" algorithm \\\n",
"id \n",
"apfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"bZfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"cZfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"dpfQWI8BTOILTbmxMgPH job-eis-fire-feds-nrt-dask-dps-v2:conus-dps \n",
"d5fQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"... ... \n",
"Ny1aCZABTOILTbmxL26n job-eis-fire-borealna-nrt_snap:eli_global_bore... \n",
"WC1dCZABTOILTbmxMHE3 job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"fC1_CZABTOILTbmxD5SC job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"rS2ACZABTOILTbmxNZXW job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"ui2BCZABTOILTbmxMZYj job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"\n",
" tag \\\n",
"id \n",
"apfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"bZfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"cZfQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"dpfQWI8BTOILTbmxMgPH job-eis-fire-feds-nrt-dask-dps-v2:conus-dps \n",
"d5fQWI8BTOILTbmxMgPH job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"... ... \n",
"Ny1aCZABTOILTbmxL26n job-eis-fire-borealna-nrt_snap:eli_global_bore... \n",
"WC1dCZABTOILTbmxMHE3 job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"fC1_CZABTOILTbmxD5SC job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"rS2ACZABTOILTbmxNZXW job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"ui2BCZABTOILTbmxMZYj job-eis-fire-feds-dps-data-checker-v2:conus-dps \n",
"\n",
" queued_datetime start_datetime \\\n",
"id \n",
"apfQWI8BTOILTbmxMgPH 2024-05-08 06:13:34.671 2024-05-08 06:20:28.163 \n",
"bZfQWI8BTOILTbmxMgPH 2024-05-08 06:26:56.936 2024-05-08 06:26:56.952 \n",
"cZfQWI8BTOILTbmxMgPH 2024-05-08 06:36:30.335 2024-05-08 06:36:30.351 \n",
"dpfQWI8BTOILTbmxMgPH 2024-05-08 06:47:56.367 2024-05-08 06:47:56.382 \n",
"d5fQWI8BTOILTbmxMgPH 2024-05-08 06:49:19.460 2024-05-08 06:51:51.971 \n",
"... ... ... \n",
"Ny1aCZABTOILTbmxL26n 2024-06-11 21:55:06.356 2024-06-11 22:04:37.539 \n",
"WC1dCZABTOILTbmxMHE3 2024-06-11 22:11:14.407 2024-06-11 22:11:14.436 \n",
"fC1_CZABTOILTbmxD5SC 2024-06-11 22:27:16.705 2024-06-11 22:45:26.077 \n",
"rS2ACZABTOILTbmxNZXW 2024-06-11 22:35:23.161 2024-06-11 22:50:40.182 \n",
"ui2BCZABTOILTbmxMZYj 2024-06-11 22:49:42.530 2024-06-11 22:51:55.557 \n",
"\n",
" end_datetime execution_time_secs dir_size \\\n",
"id \n",
"apfQWI8BTOILTbmxMgPH 2024-05-08 06:25:00.184 272.021 42446 \n",
"bZfQWI8BTOILTbmxMgPH 2024-05-08 06:27:45.268 48.316 42446 \n",
"cZfQWI8BTOILTbmxMgPH 2024-05-08 06:37:19.601 49.250 42446 \n",
"dpfQWI8BTOILTbmxMgPH 2024-05-08 06:51:40.769 224.387 29676 \n",
"d5fQWI8BTOILTbmxMgPH 2024-05-08 06:52:38.246 46.274 42406 \n",
"... ... ... ... \n",
"Ny1aCZABTOILTbmxL26n 2024-06-11 22:10:10.982 333.443 28697 \n",
"WC1dCZABTOILTbmxMHE3 2024-06-11 22:13:29.328 134.892 28751 \n",
"fC1_CZABTOILTbmxD5SC 2024-06-11 22:50:27.634 301.557 28751 \n",
"rS2ACZABTOILTbmxNZXW 2024-06-11 22:51:44.396 64.215 28751 \n",
"ui2BCZABTOILTbmxMZYj 2024-06-11 22:52:48.786 53.228 28751 \n",
"\n",
" queue status execution_time_hrs \n",
"id \n",
"apfQWI8BTOILTbmxMgPH maap-dps-eis-worker-64gb 0 0.075561 \n",
"bZfQWI8BTOILTbmxMgPH maap-dps-eis-worker-64gb 0 0.013421 \n",
"cZfQWI8BTOILTbmxMgPH maap-dps-eis-worker-64gb 0 0.013681 \n",
"dpfQWI8BTOILTbmxMgPH maap-dps-eis-worker-64gb 0 0.062330 \n",
"d5fQWI8BTOILTbmxMgPH maap-dps-eis-worker-64gb 0 0.012854 \n",
"... ... ... ... \n",
"Ny1aCZABTOILTbmxL26n maap-dps-eis-worker-64gb 0 0.092623 \n",
"WC1dCZABTOILTbmxMHE3 maap-dps-eis-worker-64gb 0 0.037470 \n",
"fC1_CZABTOILTbmxD5SC maap-dps-eis-worker-64gb 0 0.083766 \n",
"rS2ACZABTOILTbmxNZXW maap-dps-eis-worker-64gb 0 0.017838 \n",
"ui2BCZABTOILTbmxMZYj maap-dps-eis-worker-64gb 0 0.014786 \n",
"\n",
"[2087 rows x 10 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eis_job_metrics_df = job_metrics_df[job_metrics_df.algorithm.str.contains(\"-eis-\") & (job_metrics_df.status == 0)]\n",
"eis_job_metrics_df"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b14f3a1d-c3fd-484f-9d29-18f562571842",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: title={'center': 'DPS EIS Job Execution Times'}, xlabel='Start Date', ylabel='Execution Time (hours)'>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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d61+rry8PIv32bVrF5o1a4Z79+7hzJkz+O6779CqVSv873//Q+/eva0eIxE5mM1uskFE9J+UlBQBQOzZs8fkNsHBwQKA9hEcHCyEEOLKlSti8ODBwsfHR1SqVEm0b99ehIWFGew7bdo0MXr0aOHl5SVGjRqlcywAonv37kbPGxMTIwCIkydP6iwvLCwUPXr0EMHBwaKgoEBSLN27dzc4b5H9+/eLrl27Cg8PD1GnTh3xzjvviMzMTAteRSKyJjaBEZHNVa5cGZUrV8aGDRuQm5trdJujR48CAJYsWYL4+Hjt88zMTAwYMAC7du3CyZMn0a9fPwwaNMjgjtFz5sxB8+bNcfz4cUyZMgVHjhwBcL9mJz4+HuvWrbMoZhcXF4wfPx7Xr1/H8ePHJcWybt061KlTB1988QXi4+MRHx8PADhz5gz69euHp556CqdPn8aqVasQGRmJt99+26KYiMiKHJ2BEZFz+Pvvv0W1atWEh4eH6Ny5s5g0aZI4deqUzjYAxPr160s8VmhoqFiwYIH2eXBwsHjyySd1tjFVs6PP3HYXLlwQAMSqVassimXu3Lk624wcOVK89tprOsv27dsnXFxcRHZ2ttn4iMg2WANERHbx9NNP49atW9i0aRP69euHPXv2oG3btli6dKnZ/bKysvDhhx8iNDQUVatWReXKlXHx4kWDGqD27dtbPWbx352CVCqVRbHoO378OJYuXaqtCatcuTL69esHjUaDmJgYq8dNRCVjJ2gishsPDw/06dMHffr0waeffopXXnkFU6dOxZgxY0zu88EHH2DHjh34+uuv0aBBA3h6emLo0KEGHZ0rVapk9XgvXLgAAAgJCbEoFn0ajQavv/46xo0bZ7AuKCjI6nETUcmYABGRw4SGhuoMe3dzc0NhYaHONvv27cOYMWMwZMgQAPf74Vy7dq3EY7u7uwOAwfGk0mg0mD9/PkJCQtCmTRvJsbi7uxucs23btjh37hwaNGggKxYisj42gRGRzSUnJ6NXr15YtmwZTp8+jZiYGKxZswazZ8/GE088od2ubt262L17NxISEpCSkgIAaNCgAdatW4eoqCicOnUKI0aMgEajKfGcPj4+8PT0xPbt23H79m2kpaWVGGNCQgKuXr2KTZs24dFHH8WRI0fw66+/wtXVVXIsdevWxd69e3Hz5k0kJSUBAD766CMcPHgQb731FqKiohAdHY1NmzbhnXfeseh1JCLrYQJERDZXuXJldOjQAXPnzkW3bt3QvHlzTJkyBa+++ioWLlyo3e6bb75BWFgYAgMDtbUuc+fORbVq1dC5c2cMGjQI/fr1Q9u2bUs8Z4UKFTB//nz89NNPCAgI0Em0jHn00Ufh7++PFi1a4OOPP0bTpk1x+vRp9OzZU7uNlFi++OILXLt2DfXr10etWrUAAC1btkRERASio6PRtWtXtGnTBlOmTIG/v7/k15CIrEslinr5ERERETkJ1gARERGR02ECRERERE6HCRARERE5HSZARERE5HSYABEREZHTYQJERERETocJEBERETkdJkBERETkdJgAERERkdNhAkREREROhwkQEREROZ3/B8824fqgQLNwAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"eis_job_metrics_df.plot(\n",
" kind=\"line\",\n",
" title=\"DPS EIS Job Execution Times\",\n",
" x=\"start_datetime\",\n",
" xlabel=\"Start Date\",\n",
" y=\"execution_time_hrs\",\n",
" ylabel=\"Execution Time (hours)\",\n",
" rot=90,\n",
" legend=False,\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "DPS Metrics",
"language": "python",
"name": "dps-metrics"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
name: dps-metrics
dependencies:
- duckdb
- ipykernel
- matplotlib
- pandas
- python~=3.12.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment