Skip to content

Instantly share code, notes, and snippets.

@fuyi
Created September 4, 2026 05:26
Show Gist options
  • Select an option

  • Save fuyi/ec87ea1e9f06d34ae2e082412184dd18 to your computer and use it in GitHub Desktop.

Select an option

Save fuyi/ec87ea1e9f06d34ae2e082412184dd18 to your computer and use it in GitHub Desktop.
heavy_marts Production Gantt — 55 models, ~29 min (pod hyperion-dbt-heavy-marts-29807975)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>heavy_marts Production Gantt</title>
<style>
body { font-family: monospace; background: #1a1a2e; color: #eee; margin: 20px; }
h2 { color: #a0c4ff; margin-bottom: 4px; }
.subtitle { color: #666; font-size: 12px; margin-bottom: 16px; }
svg { overflow: visible; }
.bar-ok { fill: #4cc9f0; opacity: 0.88; }
.bar-error { fill: #ff4444; opacity: 0.88; }
.bar:hover { opacity: 1; cursor: default; }
.dep-line { stroke: #555; stroke-width: 1; fill: none; stroke-dasharray: 3,3; }
.model-label { font-size: 11px; fill: #aaa; text-anchor: end; }
.time-label { font-size: 10px; fill: #555; }
</style>
</head>
<body>
<h2>heavy_marts — Production execution (2026-09-03 23:42 UTC)</h2>
<div class="subtitle">55 models · ~29 min wall-clock</div>
<canvas id="tooltip-canvas" style="display:none"></canvas>
<div id="chart"></div>
<p style="font-size:11px;color:#666">
<span style="color:#4cc9f0">&#9632;</span> success &nbsp;
<span style="color:#ff4444">&#9632;</span> error &nbsp;
<span style="color:#555">- - -</span> dependency
</p>
<script>
const data = [{"model": "qc_data", "start": "2026-09-03T23:42:44.888000+00:00", "end": "2026-09-03T23:44:42.928000+00:00", "dur": 118.04, "status": "ok"}, {"model": "qc_reviewed_lead_results", "start": "2026-09-03T23:42:44.889000+00:00", "end": "2026-09-03T23:44:24.209000+00:00", "dur": 99.32, "status": "ok"}, {"model": "coaching_session_analysis_v3", "start": "2026-09-03T23:42:44.891000+00:00", "end": "2026-09-03T23:59:29.291000+00:00", "dur": 1004.4, "status": "ok"}, {"model": "int_axo_daily_user_core_skills_metric", "start": "2026-09-03T23:59:34.004000+00:00", "end": "2026-09-03T23:59:39.974000+00:00", "dur": 5.97, "status": "ok"}, {"model": "int_bonnier_daily_user_metrics", "start": "2026-09-03T23:59:34.007000+00:00", "end": "2026-09-03T23:59:35.537000+00:00", "dur": 1.53, "status": "ok"}, {"model": "int_cloudgruppen_daily_user_metrics", "start": "2026-09-03T23:59:34.009000+00:00", "end": "2026-09-04T00:01:58.419000+00:00", "dur": 144.41, "status": "ok"}, {"model": "int_axo_daily_user_disbursements", "start": "2026-09-03T23:59:34.010000+00:00", "end": "2026-09-03T23:59:45.250000+00:00", "dur": 11.24, "status": "ok"}, {"model": "int_aisa_daily_user_hitrate_metrics", "start": "2026-09-03T23:59:34.010000+00:00", "end": "2026-09-03T23:59:45.920000+00:00", "dur": 11.91, "status": "ok"}, {"model": "int_axo_daily_user_project_metrics", "start": "2026-09-03T23:59:34.010000+00:00", "end": "2026-09-04T00:00:10.370000+00:00", "dur": 36.36, "status": "ok"}, {"model": "int_daily_user_total_calls_metric", "start": "2026-09-03T23:59:34.012000+00:00", "end": "2026-09-04T00:00:13.132000+00:00", "dur": 39.12, "status": "ok"}, {"model": "int_axo_daily_user_order_percent_metric", "start": "2026-09-03T23:59:34.012000+00:00", "end": "2026-09-04T00:00:18.382000+00:00", "dur": 44.37, "status": "ok"}, {"model": "int_elskling_daily_user_metrics", "start": "2026-09-03T23:59:34.013000+00:00", "end": "2026-09-03T23:59:50.773000+00:00", "dur": 16.76, "status": "ok"}, {"model": "int_daily_user_offer_rate_mobil_metric", "start": "2026-09-03T23:59:34.013000+00:00", "end": "2026-09-04T00:02:31.863000+00:00", "dur": 177.85, "status": "ok"}, {"model": "int_daily_user_efficiency_metric", "start": "2026-09-03T23:59:34.013000+00:00", "end": "2026-09-04T00:07:25.443000+00:00", "dur": 471.43, "status": "ok"}, {"model": "int_axo_commission_score_per_session", "start": "2026-09-03T23:59:34.014000+00:00", "end": "2026-09-04T00:00:18.894000+00:00", "dur": 44.88, "status": "ok"}, {"model": "int_daily_user_sales_rate_metric", "start": "2026-09-03T23:59:34.014000+00:00", "end": "2026-09-04T00:01:35.264000+00:00", "dur": 121.25, "status": "ok"}, {"model": "int_innovative_sales_daily_user_metrics", "start": "2026-09-03T23:59:34.015000+00:00", "end": "2026-09-03T23:59:35.885000+00:00", "dur": 1.87, "status": "ok"}, {"model": "int_enklare_daily_user_metrics", "start": "2026-09-03T23:59:34.015000+00:00", "end": "2026-09-03T23:59:59.765000+00:00", "dur": 25.75, "status": "ok"}, {"model": "int_daily_user_offer_rate_metric", "start": "2026-09-03T23:59:34.015000+00:00", "end": "2026-09-04T00:01:05.195000+00:00", "dur": 91.18, "status": "ok"}, {"model": "int_daily_user_offer_rate_fixed_metric", "start": "2026-09-03T23:59:34.015000+00:00", "end": "2026-09-04T00:03:36.895000+00:00", "dur": 242.88, "status": "ok"}, {"model": "int_guldbrev_daily_user_metrics", "start": "2026-09-03T23:59:34.016000+00:00", "end": "2026-09-03T23:59:37.476000+00:00", "dur": 3.46, "status": "ok"}, {"model": "int_daily_user_qa_score_metric", "start": "2026-09-03T23:59:34.016000+00:00", "end": "2026-09-04T00:03:57.096000+00:00", "dur": 263.08, "status": "ok"}, {"model": "int_daily_user_revenue_rate_metric", "start": "2026-09-03T23:59:34.017000+00:00", "end": "2026-09-03T23:59:35.537000+00:00", "dur": 1.52, "status": "ok"}, {"model": "int_daily_user_solution_rate_metric", "start": "2026-09-03T23:59:34.017000+00:00", "end": "2026-09-04T00:02:34.547000+00:00", "dur": 180.53, "status": "ok"}, {"model": "int_fortis_adversus_lead_closures", "start": "2026-09-03T23:59:34.018000+00:00", "end": "2026-09-03T23:59:37.008000+00:00", "dur": 2.99, "status": "ok"}, {"model": "int_lendo_daily_user_metrics", "start": "2026-09-03T23:59:34.018000+00:00", "end": "2026-09-03T23:59:37.708000+00:00", "dur": 3.69, "status": "ok"}, {"model": "int_foundever_daily_user_underkpi_metrics", "start": "2026-09-03T23:59:34.018000+00:00", "end": "2026-09-03T23:59:52.748000+00:00", "dur": 18.73, "status": "ok"}, {"model": "int_lendo_daily_user_csat_metric", "start": "2026-09-03T23:59:34.018000+00:00", "end": "2026-09-04T00:00:26.338000+00:00", "dur": 52.32, "status": "ok"}, {"model": "int_elvy_daily_user_metrics", "start": "2026-09-03T23:59:34.018000+00:00", "end": "2026-09-04T00:00:34.858000+00:00", "dur": 60.84, "status": "ok"}, {"model": "int_fonero_daily_user_metrics", "start": "2026-09-03T23:59:34.021000+00:00", "end": "2026-09-04T00:01:06.781000+00:00", "dur": 92.76, "status": "ok"}, {"model": "int_foundever_daily_user_kpi_metrics", "start": "2026-09-03T23:59:34.022000+00:00", "end": "2026-09-03T23:59:51.092000+00:00", "dur": 17.07, "status": "ok"}, {"model": "int_enevo_daily_user_metrics", "start": "2026-09-03T23:59:34.022000+00:00", "end": "2026-09-04T00:00:26.702000+00:00", "dur": 52.68, "status": "ok"}, {"model": "int_foundever_daily_user_metrics", "start": "2026-09-03T23:59:34.022000+00:00", "end": "2026-09-04T00:00:52.112000+00:00", "dur": 78.09, "status": "ok"}, {"model": "int_foundever_sox_daily_user_metrics", "start": "2026-09-03T23:59:34.026000+00:00", "end": "2026-09-03T23:59:55.196000+00:00", "dur": 21.17, "status": "ok"}, {"model": "int_fjordkraft_daily_user_metrics", "start": "2026-09-03T23:59:34.497000+00:00", "end": "2026-09-04T00:00:16.457000+00:00", "dur": 41.96, "status": "ok"}, {"model": "int_maskineriet_telia_fwa_rate_metric", "start": "2026-09-03T23:59:35.540000+00:00", "end": "2026-09-04T00:00:17.600000+00:00", "dur": 42.06, "status": "ok"}, {"model": "int_neas_daily_user_metrics", "start": "2026-09-03T23:59:35.891000+00:00", "end": "2026-09-03T23:59:36.781000+00:00", "dur": 0.89, "status": "ok"}, {"model": "int_maskineriet_daily_user_metrics", "start": "2026-09-03T23:59:36.218000+00:00", "end": "2026-09-04T00:00:16.458000+00:00", "dur": 40.24, "status": "ok"}, {"model": "int_reducero_daily_user_metrics", "start": "2026-09-03T23:59:36.781000+00:00", "end": "2026-09-04T00:11:21.791000+00:00", "dur": 705.01, "status": "ok"}, {"model": "int_sambla_daily_user_metrics", "start": "2026-09-03T23:59:37.012000+00:00", "end": "2026-09-03T23:59:43.712000+00:00", "dur": 6.7, "status": "ok"}, {"model": "int_silentium_daily_user_metrics", "start": "2026-09-03T23:59:37.482000+00:00", "end": "2026-09-03T23:59:41.912000+00:00", "dur": 4.43, "status": "ok"}, {"model": "int_tele2_daily_user_metrics", "start": "2026-09-03T23:59:37.710000+00:00", "end": "2026-09-04T00:00:30.460000+00:00", "dur": 52.75, "status": "ok"}, {"model": "int_telenor_daily_user_metrics", "start": "2026-09-03T23:59:39.979000+00:00", "end": "2026-09-03T23:59:58.909000+00:00", "dur": 18.93, "status": "ok"}, {"model": "int_vkb_daily_user_metrics", "start": "2026-09-03T23:59:41.918000+00:00", "end": "2026-09-04T00:00:15.208000+00:00", "dur": 33.29, "status": "ok"}, {"model": "int_yabie_daily_user_metrics", "start": "2026-09-03T23:59:43.712000+00:00", "end": "2026-09-04T00:00:13.802000+00:00", "dur": 30.09, "status": "ok"}, {"model": "int_fortis_daily_user_metrics", "start": "2026-09-03T23:59:45.253000+00:00", "end": "2026-09-04T00:06:48.953000+00:00", "dur": 423.7, "status": "ok"}, {"model": "int_axo_daily_user_commission_score_metric", "start": "2026-09-04T00:00:18.896000+00:00", "end": "2026-09-04T00:00:19.066000+00:00", "dur": 0.17, "status": "ok"}, {"model": "session_qna_question_user_day", "start": "2026-09-04T00:11:26.441000+00:00", "end": "2026-09-04T00:11:41.371000+00:00", "dur": 14.93, "status": "ok"}, {"model": "qc_questions", "start": "2026-09-04T00:11:26.442000+00:00", "end": "2026-09-04T00:11:28.232000+00:00", "dur": 1.79, "status": "ok"}, {"model": "daily_user_metrics", "start": "2026-09-04T00:11:26.444000+00:00", "end": "2026-09-04T00:11:55.394000+00:00", "dur": 28.95, "status": "ok"}, {"model": "qc_question_flagged_report", "start": "2026-09-04T00:11:26.447000+00:00", "end": "2026-09-04T00:12:01.207000+00:00", "dur": 34.76, "status": "ok"}, {"model": "daily_team_metrics", "start": "2026-09-04T00:11:55.396000+00:00", "end": "2026-09-04T00:12:01.256000+00:00", "dur": 5.86, "status": "ok"}, {"model": "daily_organization_metrics", "start": "2026-09-04T00:11:55.397000+00:00", "end": "2026-09-04T00:11:57.277000+00:00", "dur": 1.88, "status": "ok"}, {"model": "organization_metric_info", "start": "2026-09-04T00:11:57.284000+00:00", "end": "2026-09-04T00:11:57.734000+00:00", "dur": 0.45, "status": "ok"}, {"model": "aa_organization_metric_info", "start": "2026-09-04T00:11:57.738000+00:00", "end": "2026-09-04T00:11:57.838000+00:00", "dur": 0.1, "status": "ok"}];
const deps = {"daily_organization_metrics": ["daily_user_metrics"], "int_axo_daily_user_commission_score_metric": ["int_axo_commission_score_per_session"], "int_fortis_daily_user_metrics": ["int_fortis_adversus_lead_closures"], "daily_team_metrics": ["daily_user_metrics"], "aa_organization_metric_info": ["organization_metric_info"], "daily_user_metrics": ["int_daily_user_offer_rate_metric", "int_daily_user_offer_rate_mobil_metric", "int_daily_user_offer_rate_fixed_metric", "int_daily_user_total_calls_metric", "int_daily_user_qa_score_metric", "int_daily_user_revenue_rate_metric", "int_daily_user_sales_rate_metric", "int_axo_daily_user_order_percent_metric", "int_axo_daily_user_project_metrics", "int_axo_daily_user_disbursements", "int_axo_daily_user_core_skills_metric", "int_axo_daily_user_commission_score_metric", "int_daily_user_efficiency_metric", "int_daily_user_solution_rate_metric", "int_innovative_sales_daily_user_metrics", "int_sambla_daily_user_metrics", "int_vkb_daily_user_metrics", "int_guldbrev_daily_user_metrics", "int_bonnier_daily_user_metrics", "int_lendo_daily_user_metrics", "int_enklare_daily_user_metrics", "int_elskling_daily_user_metrics", "int_lendo_daily_user_csat_metric", "int_maskineriet_daily_user_metrics", "int_maskineriet_telia_fwa_rate_metric", "int_neas_daily_user_metrics", "int_fjordkraft_daily_user_metrics", "int_foundever_daily_user_metrics", "int_foundever_sox_daily_user_metrics", "int_foundever_daily_user_kpi_metrics", "int_foundever_daily_user_underkpi_metrics", "int_yabie_daily_user_metrics", "int_telenor_daily_user_metrics", "int_elvy_daily_user_metrics", "int_fonero_daily_user_metrics", "int_aisa_daily_user_hitrate_metrics", "int_cloudgruppen_daily_user_metrics", "int_reducero_daily_user_metrics", "int_enevo_daily_user_metrics", "int_silentium_daily_user_metrics", "int_tele2_daily_user_metrics", "int_fortis_daily_user_metrics"], "organization_metric_info": ["daily_organization_metrics"]};
data.sort((a,b) => new Date(a.start)-new Date(b.start));
const runStart = new Date(data[0].start).getTime();
const runEnd = Math.max(...data.map(d=>new Date(d.end).getTime()));
const totalMs = runEnd - runStart;
const LABEL_W = 340, BAR_H = 16, ROW_H = 20, TOP = 30, PX = 1200/(totalMs/1000);
const W = LABEL_W + 1200 + 20;
const H = TOP + data.length * ROW_H + 10;
// map model -> row index
const rowIndex = {};
data.forEach((d,i) => rowIndex[d.model] = i);
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', W);
svg.setAttribute('height', H);
svg.style.display = 'block';
// Time ticks
for (let s = 0; s <= totalMs/1000; s += 300) {
const x = LABEL_W + s*PX;
const tick = document.createElementNS('http://www.w3.org/2000/svg','line');
tick.setAttribute('x1', x); tick.setAttribute('y1', TOP-10);
tick.setAttribute('x2', x); tick.setAttribute('y2', H);
tick.setAttribute('stroke','#222'); tick.setAttribute('stroke-width','1');
svg.appendChild(tick);
const lbl = document.createElementNS('http://www.w3.org/2000/svg','text');
lbl.setAttribute('x', x); lbl.setAttribute('y', TOP-14);
lbl.setAttribute('class','time-label'); lbl.setAttribute('text-anchor','middle');
lbl.textContent = Math.round(s/60)+'m';
svg.appendChild(lbl);
}
// Dependency lines
Object.entries(deps).forEach(([model, parents]) => {
const toRow = rowIndex[model];
if (toRow === undefined) return;
const toY = TOP + toRow*ROW_H + BAR_H/2;
const toX = LABEL_W + ((new Date(data[toRow].start).getTime()-runStart)/1000)*PX;
parents.forEach(parent => {
const fromRow = rowIndex[parent];
if (fromRow === undefined) return;
const fromY = TOP + fromRow*ROW_H + BAR_H/2;
const fromX = LABEL_W + ((new Date(data[fromRow].end).getTime()-runStart)/1000)*PX;
const path = document.createElementNS('http://www.w3.org/2000/svg','path');
const mx = (fromX + toX)/2;
path.setAttribute('d', `M${fromX},${fromY} C${mx},${fromY} ${mx},${toY} ${toX},${toY}`);
path.setAttribute('class','dep-line');
svg.appendChild(path);
});
});
// Bars and labels
data.forEach((d,i) => {
const y = TOP + i*ROW_H;
const x = LABEL_W + ((new Date(d.start).getTime()-runStart)/1000)*PX;
const w = Math.max(3, ((new Date(d.end).getTime()-new Date(d.start).getTime())/1000)*PX);
const lbl = document.createElementNS('http://www.w3.org/2000/svg','text');
lbl.setAttribute('x', LABEL_W-4); lbl.setAttribute('y', y+BAR_H-3);
lbl.setAttribute('class','model-label');
lbl.textContent = d.model;
svg.appendChild(lbl);
const rect = document.createElementNS('http://www.w3.org/2000/svg','rect');
rect.setAttribute('x', x); rect.setAttribute('y', y);
rect.setAttribute('width', w); rect.setAttribute('height', BAR_H);
rect.setAttribute('rx', 2);
rect.setAttribute('class', 'bar bar-' + d.status);
rect.innerHTML = `<title>${d.model} — ${d.dur.toFixed(1)}s</title>`;
svg.appendChild(rect);
});
document.getElementById('chart').appendChild(svg);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment