document.addEventListener("DOMContentLoaded", monitoring__init); function monitoring__init () { let langSwitch = document.querySelector('.lang__switch'); const url = new URL(document.location); const langUrlParam = url.searchParams.get('lang'); if (langSwitch && langSwitch.value === 'en' || langUrlParam === 'en') { localStorage.setItem('lang', 'en'); } else { localStorage.setItem('lang', 'ru'); } let lang = localStorage.getItem('lang') || 'ru'; let dict = monitoring__getDict(lang); monitoring__html__mainStructure(dict); monitoring__sendQuery(dict); document.querySelectorAll('.lang__input').forEach((input) => { input.addEventListener('click', (event) => { let value = event.target.value; const url = new URL(document.location); const searchParams = url.searchParams; if(value === 'ru') { localStorage.setItem('lang', 'ru'); searchParams.delete('lang'); } else if(value === 'en') { localStorage.setItem('lang', 'en'); searchParams.set('lang', 'en'); } window.history.pushState({}, '', url.toString()); let lang = localStorage.getItem('lang') || 'ru'; monitoring__translatePage(monitoring__getDict(lang)); }); }); document.querySelector('.js-instruction-button').addEventListener('click', monitoring__html__instruction); document.querySelector('.js-download-button').addEventListener('click', (event) => monitoring__downloadReport(monitoring__getDict(lang), event)); document.querySelector('.js-query-button').addEventListener('click', () => monitoring__sendQuery(monitoring__getDict(lang))); document.querySelector('.js-error-button').addEventListener('click', () => monitoring__sendQuery(monitoring__getDict(lang))); document.querySelectorAll('.params__input_switch').forEach((item) => item.addEventListener('change', (event) => { let checkbox = event.target; let container = checkbox.dataset.container; let list = document.querySelectorAll('.' + container); list.forEach((div) => { if(checkbox.checked) { div.classList.add('table__time_visible'); } else { div.classList.remove('table__time_visible'); } }); })); document.querySelector('.table').addEventListener('click', (event) => { let target = event.target.closest('.table__data'); if(target) monitoring__html__details(monitoring__getDict(lang), target); }); } function monitoring__html__mainStructure (dict) { let html = '
' + dict.subtitle + '
'; return html; } function monitoring__html__params (dict) { let date = monitoring__getDateRange(); let domains = monitoring__getOptions('domainsParams'); let html = '' + dict.table_terms + ' | ' + '' + dict.table_domains + ' | ' + '|||||
---|---|---|---|---|---|---|
' + domainsData[domain] + ' | '; } html += '||||||
' + monitoring__getDateFromTimestamp(new Date(parseInt(term, 10) * 1000)) + ' | '; for(let domainIndex in domainsValue) { let domain = domainsValue[domainIndex]; let data = result[term][domain]; if (!data) break; html += '' +
' ' + domain + ' ' +
(data.modeling_start ? `${data.modeling_start.match(regexp)} (1) ` : '') +
(data.modeling_end ? `${data.modeling_end.match(regexp)} (2) ` : '') +
(data.visualization_start ? `${data.visualization_start.match(regexp)} (3) ` : '') +
(data.visualization_end ? `${data.visualization_end.match(regexp)} (4) ` : '') +
(data.loading_start ? `${data.loading_start.match(regexp)} (5) ` : '') +
(data.loading_end ? `${data.loading_end.match(regexp)} (6) ` : '') +
' | ';
}
html += '
' + dict.details_date + ' | ' + '' + date + ' | ' + '
' + dict.details_domian + ' | ' + '' + domain + ' | ' + '
' + dict.details_modelingStart + ' | ' + '' + modeling_start + ' | ' + '
' + dict.details_modelingEnd + ' | ' + '' + modeling_end + ' | ' + '
' + dict.details_visualizationStart + ' | ' + '' + visualization_start + ' | ' + '
' + dict.details_visualizationEnd + ' | ' + '' + visualization_end + ' | ' + '
' + dict.details_loadingStart + ' | ' + '' + loading_start + ' | ' + '
' + dict.details_loadingEnd + ' | ' + '' + loading_end + ' | ' + '
' + dict.details_result + ' | ' + '' + result + ' | ' + '
' + dict.details_notExistTerm + ' | ' + '' + not_exist_term + ' | ' + '
Данный интерфейс разработан для проверки наличия визуализированный прогнозов погоды на ftp-сервере 10.1.112.224. Во время работы интерфейс проверяет наличие файлов по определенным конфигурациям модели COSMO-Ru за определенный промежуток времени. Для сокращения времени работы интерфейса проверка ведется не по всем доменам, а по одному, который включает в себя большую часть рассчитанной информации (самые большие домены для данной конфигурации). В таблице ниже представлены эти домены.
' + 'Конфигурация | ' + 'Домен | ' + '
---|---|
2CFO | ' + // 'FM-CFO | ' + // '
2SFO | ' + 'FM-BSC | ' + '
1Sochi | ' + 'FM-SochiTu | ' + '
6ena | ' + 'fm_Russia | ' + '
2etr | ' + 'fm_Belarus | ' + '
1msk | ' + 'fm_MosReg | ' + '
icon13ru | ' + 'fm_SNG | ' + '
Данные о наличии прогнозов сводятся в таблицу, где по горизонтали располагаются конфигурации модели, а по вертикали время прогноза. Цвет ячейки определяет полноту наличия прогнозов (обозначения цветов представлены в таблице ниже).
' + 'Ячейка | ' + 'Примечание | ' + '
---|---|
Данные получены в полном объёме | ' + 'Файлы по всем заблаговременностям для одного выбранного домена расположены на сервере. | ' + '
Данные получены не полностью | ' + '' +
'Найдены не все заблаговременности для одного выбранного домена. Это может обозначать, что:' +
'
| ' +
'
Данные отсутствуют | ' + 'Отсутсвует папка, в которой должны хранится искомые прогнозы. | ' + '
Размер файла меньше 30К | ' + 'Все файлы найдены, но среди них есть файлы с маленьким объемом. Это может обозначать, что внутри файлов хранится только шаблон домена без прогнозов. | ' + '