У меня есть требование построить историю выполнения задачи в Highcharts. Он должен отображать историю выполнения задач в виде горизонтальной полосы. Есть дополнительные требования, которые я добавил в качестве обновления ниже. Недавно я узнал, что эта inverted
опция не поддерживается в StockChart и что только навигатор и rangeSelector в StockChart доступны . Поэтому я использую эти функции.
Поэтому для того , чтобы достичь требования я создал нечто похожее на эту jsfiddle примера (найденные где - то во время просмотра не помнит источник) и в конечном итоге с этой plunker ссылкой с помощью моего предыдущего вопроса , благодаря Pawel Fus
Обновляем вопрос, чтобы избежать путаницы
Дополнительные требования:
Показывать только те задачи, которые выполнялись в определенном диапазоне дат и времени . В случае, если выполняется слишком много запусков, например, более 10 запусков, тогда должен быть способ визуально отображать только 10 задач с помощью оси Y, которую можно прокручивать для отображения других задач. плункер ссылка на проблему
Объяснение проблемы вышеупомянутого плункера.
Если вы посмотрите на снимок экрана ниже сверху плункера, временной диапазон от 12/12/2014 09:32:26
до 12/12/2014 10:32:26
и есть только 2 задачи, которые запустили m_ARRAYV_SALES_ZIG1_CALL2_VOD__C_OB
& m_ZIG2_HCP_MERGE_IB_CN
. Однако я вижу другую промежуточную задачу, LILLY_C
которая даже не выполнялась в этом диапазоне дат. (В фактических данных есть более 10 задач, которые загромождают эту диаграмму, которая даже не попадает в этот временной диапазон)
Также, если вы заметили, что в правом нижнем углу время сместилось с 09:38
на 19:20
. 19:20
время окончания m_ZIG2_HCP_MERGE_IB_CN
задачи.
Ниже мои варианты диаграммы
var chart_options = {
chart: {
renderTo: 'container',
height: 600
},
title: {
},
credits: {
enabled: false
},
xAxis: {
type: 'datetime',
gridLineWidth: 1,
tickInterval: 1 * 3600 * 1000,
dateTimeLabelFormats: {
month: '%b %e, %Y'
}
},
yAxis: {
tickInterval: 1,
gridLineWidth: 1,
labels: {
formatter: function() {
if (tasks[this.value]) {
return tasks[this.value].name;
}
}
},
startOnTick: false,
endOnTick: false,
title: {
text: 'Task'
}
},
rangeSelector: {
selected: 0,
buttons: [ {
type: "minute",
count: 60,
text: "1h"
}, {
type: "minute",
count: 180,
text: "3h"
}, {
type: "minute",
count: 300,
text: "5h"
}],
inputDateFormat: '%m/%d/%Y %H:%M:%S',
inputEditDateFormat: '%m/%d/%Y %H:%M:%S',
inputBoxWidth: 120
},
navigator: {
enabled: false
},
legend: {
enabled: false
},
tooltip: {
shared: false,
formatter: function() {
var str = '';
str += 'Task: ' + this.series.name + '<br>';
str += 'From: ' + Highcharts.dateFormat('%m/%d/%y %H:%M', this.point.from) + '<br>';
str += 'To: ' + Highcharts.dateFormat('%m/%d/%y %H:%M', this.point.to) + '<br>';
return str;
}
},
plotOptions: {
line: {
lineWidth: 10,
marker: {
enabled: true
},
dataLabels: {
enabled: true,
align: 'left',
formatter: function() {
return this.point.options && this.point.options.label;
}
},
states:{
hover:{
lineWidth:10
}
}
},
series: {
cursor: 'pointer',
point: {
events: {
click: function () {
var query = '{ "task_id": "'+this.task_id+'","start_time": '+this.from+',"exclude_interval": '+opExcludeMinutes+',"size": 10 }';
$scope.taskName = this.series.name;
$scope.isTaskSelected = false;
$scope.operationalReportAgentTaskHistoryServiceRequest(query);
}
}
}
}
},
series: seriesData
};