您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
"调整airflow web上的时间显示方式"
// ==UserScript== // @name airflow-hack // @namespace thedream // @description "调整airflow web上的时间显示方式" // @version 1.5.1 // @grant none // @include http://plat-crontab*/admin/ // @include http://plat-crontab*/admin/airflow/tree* // @include http://plat-crontab*/admin/dagrun/* // @include http://plat-crontab*/admin/taskinstance/* // @include http://localhost:8082/admin/ // @include http://localhost:8082/admin/airflow/tree* // @include http://localhost:8082/admin/dagrun/* // @include http://localhost:8082/admin/taskinstance/* // @include http://kettle-crontab*/admin/ // @include http://kettle-crontab*/admin/taskinstance/* // @include http://kettle-crontab*/admin/dagrun/* // @include http://kettle-crontab*/admin/airflow/tree* // @author guanxiaoqin // ==/UserScript== (function () { 'use strict'; function heightLight(tableEle) { let oldColor = ''; let tableRows = tableEle.tBodies[0].rows.length; for (let i = 0; i < tableRows; i++) { let item = tableEle.tBodies[0].rows[i]; item.onmouseover = function () { oldColor = this.style.background; this.style.background = "#f1f1f1"; //高亮背景 }; item.onmouseout = function () { this.style.background = oldColor; }; } } function replaceTimeInAdmin() { var $e = $(".text-nowrap.latest_dag_run"); if ($e.length === 0) return; $e.each(function () { var time; var text = $(this).find("span").attr("data-original-title"); if (text) time = text.split("Start Date: ")[1]; time = changeTimeForm(time, true, false); $(this).find("a").text(time) }) } function replaceTimeInTreeView() { var $e = $(".stateboxes .state"); if ($e.length === 0) return; $e.each(function () { let Arr; let text = $(this).attr("data-original-title"); if (text) Arr = text.split("<br>"); let arrNew = Arr.map(function (currentValue) { // 修改数组里面指定的时间文本 let newVal = currentValue if (currentValue.indexOf('Run:') > -1 || currentValue.indexOf('Started:') > -1 || currentValue.indexOf('Ended:') > -1) { let time = currentValue.split(" ")[1] // 'Run: 2020-03-13T05:55:01.213686+00:00' let fnTime = changeTimeByRule(time) time = changeTimeForm(fnTime, true, true); newVal = currentValue.split(" ")[0] + ' ' + time } return newVal; }); let newText = arrNew.join('<br>') $(this).attr("data-original-title", newText) // 替换属性内容 }) } function addTitleInAdmin() { var $e = $(".text-nowrap.latest_dag_run"); if ($e.length === 0) return; // 判断是否是admin页面 var $td = $("tr td:nth-child(3)"); if ($td.length === 0) return; $td.each(function () { var textAll = $(this).find('a').text(); var text = $(this).find("a").attr("title"); if (text) textAll = `${textAll} - (${text})` $(this).find("a").text(textAll) }) } function changeTimeInTask(element) { var $e = $(element); if ($e.length === 0) return; $e.each(function () { let time = $(this).text() if(!time) return // 容错性 let fnTime = changeTimeByRule(time) fnTime = changeTimeForm(fnTime, true, true); $(this).text(fnTime) }) } function changeTimeByRule(time) { // 2020-03-13T05:55:01.213686+00:00 ====> 2019-12-22 06:09:28 let fnTime = time.split("+")[0].split(".")[0]; const arr = fnTime.split("T"); if (arr.length < 2) return; const dateArr = arr[0].split("-"); // 年月日数组 if (dateArr.length === 2) { fnTime = (new Date()).getFullYear() + "-" + arr[0] + " " + arr[1]; // 补上此刻的年份 } else { fnTime = arr[0] + " " + arr[1]; // 格式为 2019-12-22 06:09:28 } return fnTime } function changeTimeForm(oldTime, with_year, with_second) { // 2019-12-22 06:09:28 ====> 2019-12-22 14:09:28 function pad(str) { return +str >= 10 ? str : '0' + str; } var timestamp = (new Date(oldTime)).getTime() + 8 * 60 * 60 * 1000; // 单位毫秒,增加8小时 var dateObj = new Date(+timestamp); var year = dateObj.getFullYear(); var month = pad(dateObj.getMonth() + 1); var date = pad(dateObj.getDate()); var hours = pad(dateObj.getHours()); var minutes = pad(dateObj.getMinutes()); var seconds = pad(dateObj.getSeconds()); var prefix_year = ""; var prefix_second = ""; if (with_year) prefix_year = year + '-'; if (with_second) prefix_second = ':' + seconds; return prefix_year + month + '-' + date + ' ' + hours + ':' + minutes + prefix_second } replaceTimeInAdmin();// 替换admin页面中时间 addTitleInAdmin(); // admin title拼接 changeTimeInTask("td.col-execution_date nobr");// 改变task页面中指定元素的时间 changeTimeInTask("td.col-start_date nobr"); changeTimeInTask("td.col-end_date nobr"); changeTimeInTask("td.col-queued_dttm nobr"); replaceTimeInTreeView() // 替换/airflow/tree页面的时间 let tableEle = document.getElementById('dags');// 获取admin页面表格 if (tableEle) heightLight(tableEle); })();