Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Wait for config API to avoid NaN passed to offset. - #44989

Merged
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading
Dec 19, 2024
Merged

Wait for config API to avoid NaN passed to offset. #44989
bbovenzi merged 3 commits into
apache:mainfrom
tirkarthi:fix-nan-loading

Conversation

@tirkarthi

Copy link
Copy Markdown
Contributor

Whenever a page is loaded the offset and limit values are passed to the API from pagination object. limit is fetched from config API through page_size in airflow.cfg. As pagination.pageSize is undefined offset which is pagination.pageIndex * pagination.pageSize becomes NaN and passed to the API causing backend to return 422 if the API call for a resource is made before config finishes. Once config finishes the offset value is calculated properly and then passed to API resulting in two API calls with 1 invalid returning 422 and then again passing with valid offset value to fetch the correct response. Use enabled option to not make call if the offset is NaN. Another option would be default value for pagination.pageSize but that would result in 2 API calls with default value and later the value from config API call.

Another issue is that for running dagruns and running/deferred task instances the end_date is not present causing NaN to be displayed in UI in dagrun duration, task instance duration, etc. Use current time if end_date is not present like the legacy UI.

To reproduce :

  1. Open console and visit http://localhost:8000/webapp/dags
  2. The console will log API calls sending NaN

http://localhost:8000/public/dags?offset=NaN&only_active=true&order_by=-last_run_start_date
http://localhost:8000/ui/dags/recent_dag_runs?dag_runs_limit=14&offset=NaN&only_active=true

@boring-cyborgboring-cyborgBot added the area:UI Related to UI/UX. For Frontend Developers. label Dec 17, 2024
@tirkarthitirkarthi mentioned this pull request Dec 19, 2024
Comment threadairflow/ui/src/pages/Dag/Runs/Runs.tsx Outdated
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
@bbovenzi
bbovenzi merged commit ac0501d into apache:mainDec 19, 2024
@tirkarthi

Copy link
Copy Markdown
ContributorAuthor

I think this is something easier to forget as APIs are more widely used in UI and should be enforced or as a convention someway but not sure how.

@bbovenzi

Copy link
Copy Markdown
Contributor

Yeah, I definitely don't like having to remember to manually add this every single time. I'll try to play with a more elegant solution

got686-yandex pushed a commit to got686-yandex/airflow that referenced this pull request Jan 30, 2025
* Fix NaNs when end_date is not defined.
Fix NaN passed to limit param in API by waiting for config API.
Fix recent task instances sort order.
* Fix NaN offset in XCom page.
* Add getDuration util function.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UIRelated to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@tirkarthi@bbovenzi