Compare commits

..

No commits in common. "8c527b4ae6e299258778c1d96c50dcff76ff7174" and "995a6156bc214b82ba939756fad463178da037fb" have entirely different histories.

8 changed files with 59 additions and 121 deletions

@ -1 +1 @@
Subproject commit 2ded1a0c97dfcb39c2a538579f4c5b17dc940613 Subproject commit 4d8b49c685dd6a332784a4776919b526dd3f8039

View File

@ -107,8 +107,7 @@
"values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}] "values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}]
}, },
{"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"}, {"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"},
{"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}, {"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}
{"widget": "text", "label": "Имя веб-сервера", "name": "netServerName"}
] ]
} }
] ]
@ -322,8 +321,7 @@
"values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}] "values": [{"label": "Маршрутизатор", "value": "false"}, {"label": "Коммутатор", "value": "true"}]
}, },
{"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"}, {"widget": "ip-address", "label": "Интерфейс данных (/24)", "name": "netDataIp", "v_show": "paramNetwork.netIsL2 === false"},
{"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}, {"widget": "number", "label": "MTU интерфейса данных", "name": "netDataMtu", "min": 1500, "step": 1, "max": 2000}
{"widget": "text", "label": "Имя веб-сервера", "name": "netServerName"}
] ]
} }
] ]

View File

@ -59,11 +59,6 @@
<input v-model="param{{ param_group | title }}.{{ widget.name }}" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"> <input v-model="param{{ param_group | title }}.{{ widget.name }}" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
</label>{% endmacro %} </label>{% endmacro %}
{% macro build_widget_text(param_group, widget) %}<label{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>
<span>{{ widget.label }}</span>
<input v-model="param{{ param_group | title }}.{{ widget.name }}" type="text">
</label>{% endmacro %}
{% macro build_widget(param_group, widget) %}{% if widget.widget == 'flex-container' %}{{ build_widget_flex_container(param_group, widget) }} {% macro build_widget(param_group, widget) %}{% if widget.widget == 'flex-container' %}{{ build_widget_flex_container(param_group, widget) }}
{% elif widget.widget == 'settings-container' %}{{ build_widget_settings_container(param_group, widget) }} {% elif widget.widget == 'settings-container' %}{{ build_widget_settings_container(param_group, widget) }}
{% elif widget.widget == 'h2' %}<h2{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>{{ widget.label }}</h2> {% elif widget.widget == 'h2' %}<h2{% if widget.v_show %} v-show="{{ widget.v_show }}"{% endif %}>{{ widget.label }}</h2>
@ -78,22 +73,21 @@
{% elif widget.widget == 'modulation-modcod' %}{{ build_widget_modulation_modcod(param_group, widget) }} {% elif widget.widget == 'modulation-modcod' %}{{ build_widget_modulation_modcod(param_group, widget) }}
{% elif widget.widget == 'modulation-speed' %}{{ build_widget_modulation_speed(param_group, widget) }} {% elif widget.widget == 'modulation-speed' %}{{ build_widget_modulation_speed(param_group, widget) }}
{% elif widget.widget == 'ip-address' %}{{ build_widget_ip_address(param_group, widget) }} {% elif widget.widget == 'ip-address' %}{{ build_widget_ip_address(param_group, widget) }}
{% elif widget.widget == 'text' %}{{ build_widget_text(param_group, widget) }}
{% else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p> {% else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}
{% macro build_getter_js(param_group, widget) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{% {% macro build_getter_js(param_group, widget) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{%
elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed', 'text'] %}this.param{{ param_group | title }}.{{ widget.name }}{% elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed'] %}this.param{{ param_group | title }}.{{ widget.name }}{%
elif widget.widget == 'number-int' %}parseFloat(this.param{{ param_group | title }}.{{ widget.name }}.replace(/[^0-9,.]/g, '').replace(',', '.')){% elif widget.widget == 'number-int' %}parseFloat(this.param{{ param_group | title }}.{{ widget.name }}.replace(/[^0-9,.]/g, '').replace(',', '.')){%
else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %} else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %}
{% macro build_setter_js(param_group, widget, expr) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{% {% macro build_setter_js(param_group, widget, expr) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{%
elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed', 'text'] %}this.param{{ param_group | title }}.{{ widget.name }} = {{ expr }}{% elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed'] %}this.param{{ param_group | title }}.{{ widget.name }} = {{ expr }}{%
elif widget.widget == 'number-int' %}this.param{{ param_group | title }}.{{ widget.name }} = this.inputFormatNumber({{ expr }}, {{ js_build_number_number_validator(widget) }}){% elif widget.widget == 'number-int' %}this.param{{ param_group | title }}.{{ widget.name }} = this.inputFormatNumber({{ expr }}, {{ js_build_number_number_validator(widget) }}){%
else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %} else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %}
{% macro build_setter(param_group, widget, expr) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{% {% macro build_setter(param_group, widget, expr) %}{% if widget.widget in ['flex-container', 'settings-container', 'h2', 'h3', 'submit', 'watch', 'watch-expr'] %}null{%
elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed', 'text'] %}param{{ param_group | title }}.{{ widget.name }} = {{ expr }}{% elif widget.widget in ['checkbox', 'number', 'select', 'ip-address', 'modulation-modcod', 'modulation-speed'] %}param{{ param_group | title }}.{{ widget.name }} = {{ expr }}{%
elif widget.widget == 'number-int' %}param{{ param_group | title }}.{{ widget.name }} = inputFormatNumber({{ expr }}, {{ js_build_number_number_validator(widget) }}){% elif widget.widget == 'number-int' %}param{{ param_group | title }}.{{ widget.name }} = inputFormatNumber({{ expr }}, {{ js_build_number_number_validator(widget) }}){%
else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %} else %}<p>Widget '{{ widget.widget }}' not defined!</p><p>{{ widget }}</p>{% endif %}{% endmacro %}

View File

@ -186,10 +186,6 @@
{% if 'qos' in tab_names_array %} {% if 'qos' in tab_names_array %}
this.updateQosSettings(vals) this.updateQosSettings(vals)
{% endif %} {% endif %}
if ('netServerName' in vals['settings']) {
document.getElementsByTagName('title')[0].innerText = vals['settings']['netServerName']
}
} }
doFetchSettings().then(() => {}) doFetchSettings().then(() => {})

View File

@ -70,17 +70,10 @@ static const char* boolAsStr(bool value) {
class TerminalNetworkSettings { class TerminalNetworkSettings {
public: public:
std::string managementIp, managementGateway, dataIp, serverName; std::string managementIp, managementGateway, dataIp;
bool isL2 = true; bool isL2 = true;
unsigned int dataMtu = 1500; unsigned int dataMtu = 1500;
#ifdef MODEM_IS_SCPC
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101";
#endif
#ifdef MODEM_IS_TDMA
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101 TDMA";
#endif
TerminalNetworkSettings() = default; TerminalNetworkSettings() = default;
TerminalNetworkSettings(const TerminalNetworkSettings& src) = default; TerminalNetworkSettings(const TerminalNetworkSettings& src) = default;
~TerminalNetworkSettings() = default; ~TerminalNetworkSettings() = default;
@ -93,7 +86,6 @@ public:
isL2 = true; isL2 = true;
dataIp = "0.0.0.0"; dataIp = "0.0.0.0";
dataMtu = 1500; dataMtu = 1500;
serverName = DEFAULT_SERVER_NAME;
} }
}; };
@ -121,21 +113,6 @@ static std::ostream& operator<<(std::ostream& out, CP_Result result) {
return out; return out;
} }
std::string makeTimepointFromMillis(int64_t unix_time_ms) {
// Преобразуем миллисекунды в микросекунды для std::chrono
auto time_point = std::chrono::time_point<std::chrono::system_clock,
std::chrono::microseconds>(std::chrono::microseconds(unix_time_ms * 1000));
auto tp = std::chrono::system_clock::to_time_t(time_point);
tm* t = std::localtime(&tp);
std::stringstream ss;
ss << std::put_time(t, "%Y-%m-%d %H:%M:%S");
auto ms = (unix_time_ms % 1000);
ss << '.' << std::setw(3) << std::setfill('0') << ms;
return ss.str();
}
class api_driver::StatisticsLogger { class api_driver::StatisticsLogger {
public: public:
StatisticsLogger(): timeStart(TIME_NOW()) {} StatisticsLogger(): timeStart(TIME_NOW()) {}
@ -172,7 +149,7 @@ public:
if (newEn) { if (newEn) {
this->logFile.open("/tmp/weblog-statistics.csv", std::ios::out); this->logFile.open("/tmp/weblog-statistics.csv", std::ios::out);
if (this->logFile.is_open()) { if (this->logFile.is_open()) {
const auto* header = "timestamp\tcnt ok\tcnt bad\tfine freq dem\tcrs freq dem\tcrs freq compensator\tcrs time est\tfine time est\tmax level corr\tcurrent delay\tSNR\tcurrent modcod\tfine freq compensator\tind freq grb\tind freq tochn\tind filt adapt\tfilter corr cinc\tcorr cnt\tRSS\tcor erl\tcor lat\tgc gain\tpower pl rx\n"; const auto* header = "timestamp\tpkt ok\tpkt bad\tfine freq dem\tcrs freq dem\tcrs freq compensator\tcrs time est\tfine time est\tmax level corr\torigin delay\tSNR\tmodcod\tfine freq compensator\tind freq grb\tind freq tochn\tind filt adapt\tfilter corr cinc\tcorr cnt\n";
this->logFile.write(header, static_cast<std::streamsize>(strlen(header))); this->logFile.write(header, static_cast<std::streamsize>(strlen(header)));
this->logEn = true; this->logEn = true;
this->timeStart = TIME_NOW(); this->timeStart = TIME_NOW();
@ -195,7 +172,7 @@ public:
if (!logEn) return; if (!logEn) return;
if (this->logFile.is_open()) { if (this->logFile.is_open()) {
std::stringstream res; std::stringstream res;
res << makeTimepointFromMillis(TIME_NOW()) << '\t'; res << TIME_NOW() - this->timeStart << '\t';
res << item.cnt_ok << '\t'; res << item.cnt_ok << '\t';
res << item.cnt_bad << '\t'; res << item.cnt_bad << '\t';
res << item.fine_freq_dem << '\t'; res << item.fine_freq_dem << '\t';
@ -204,7 +181,7 @@ public:
res << item.crs_time_est << '\t'; res << item.crs_time_est << '\t';
res << item.fine_time_est << '\t'; res << item.fine_time_est << '\t';
res << item.max_level_corr << '\t'; res << item.max_level_corr << '\t';
res << item.current_delay << '\t'; res << item.origin_delay << '\t';
res << item.SNR << '\t'; res << item.SNR << '\t';
res << item.current_modcod << '\t'; res << item.current_modcod << '\t';
res << item.fine_freq_compensator << '\t'; res << item.fine_freq_compensator << '\t';
@ -212,12 +189,7 @@ public:
res << item.ind_freq_tochn << '\t'; res << item.ind_freq_tochn << '\t';
res << item.ind_filt_adapt << '\t'; res << item.ind_filt_adapt << '\t';
res << item.filter_corr_cinc << '\t'; res << item.filter_corr_cinc << '\t';
res << item.corr_cnt << '\t'; res << item.corr_cnt << '\n';
res << item.RSS << '\t';
res << item.cor_erl << '\t';
res << item.cor_lat << '\t';
res << item.gc_gain << '\t';
res << item.power_pl_rx << '\n';
const auto out = res.str(); const auto out = res.str();
this->logFile.write(out.c_str(), static_cast<std::streamsize>(out.length())); this->logFile.write(out.c_str(), static_cast<std::streamsize>(out.length()));
@ -323,47 +295,26 @@ private:
} }
} }
void unsafeLoadNetworkSettings(TerminalNetworkSettings& s) {
s.loadDefaults();
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
// logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
// s.managementIp += "/";
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
if (nm == "tun") {
s.isL2 = false;
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
} else {
s.isL2 = true;
}
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
s.dataMtu = 1500;
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(name_serv)", CP_GetNetwork(sid, "name_serv", &s.serverName));
if (s.serverName.empty()) {
s.serverName = TerminalNetworkSettings::DEFAULT_SERVER_NAME;
}
}
void unsafStoreNetworkSettings(TerminalNetworkSettings& s) {
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(mode)", CP_SetNetwork(sid, "mode", s.isL2 ? "tap" : "tun"));
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(addr)", CP_SetNetwork(sid, "addr", s.managementIp.c_str()));
if (!s.isL2) {
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(addr_data)", CP_SetNetwork(sid, "addr_data", s.dataIp.c_str()));
// TODO маска не устанавливается, потому что в API этого нет
}
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(mask)", CP_SetNetwork(sid, "mask", "255.255.255.0"));
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(gateway)", CP_SetNetwork(sid, "gateway", s.managementGateway.c_str()));
// TODO MTU не устанавливается, потому что в API этого нет
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_SetNetwork(name_serv)", CP_SetNetwork(sid, "name_serv", s.serverName.c_str()));
}
void updateNetworkSettings() { void updateNetworkSettings() {
TerminalNetworkSettings s; TerminalNetworkSettings s;
std::lock_guard lock(this->cpApiMutex); std::lock_guard lock(this->cpApiMutex);
unsafeLoadNetworkSettings(s); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
// s.managementIp = tmp + "/";
// tmp.clear(); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
if (nm == "tun") {
s.isL2 = false;
logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
// s.dataIp += "/24";
} else {
s.isL2 = true;
// s.dataIp = "0.0.0.0/24";
s.dataIp = "0.0.0.0";
}
s.dataMtu = 1500;
{ {
std::lock_guard lock2(this->networkSettingsMutex); std::lock_guard lock2(this->networkSettingsMutex);
@ -386,7 +337,6 @@ private:
{ {
std::lock_guard _lock(this->stateMutex); std::lock_guard _lock(this->stateMutex);
this->deviceInitState = "Not connected to API"; this->deviceInitState = "Not connected to API";
this->networkSettings.loadDefaults();
} }
unsigned int access{}; unsigned int access{};
@ -755,10 +705,34 @@ public:
std::lock_guard lock(this->cpApiMutex); std::lock_guard lock(this->cpApiMutex);
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetDmaDebug(begin_save_config)", CP_SetDmaDebug(sid, "begin_save_config", "")); logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetDmaDebug(begin_save_config)", CP_SetDmaDebug(sid, "begin_save_config", ""));
unsafStoreNetworkSettings(s); logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(mode)", CP_SetNetwork(sid, "mode", s.isL2 ? "tap" : "tun"));
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(addr)", CP_SetNetwork(sid, "addr", s.managementIp.c_str()));
if (!s.isL2) {
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(addr_data)", CP_SetNetwork(sid, "addr_data", s.dataIp.c_str()));
// TODO маска не устанавливается, потому что в API этого нет
}
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(mask)", CP_SetNetwork(sid, "mask", "255.255.255.0"));
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(gateway)", CP_SetNetwork(sid, "gateway", s.managementGateway.c_str()));
// TODO MTU не устанавливается, потому что в API этого нет
if (readback) { if (readback) {
unsafeLoadNetworkSettings(s); s.loadDefaults();
s.managementIp.clear();
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
// logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
// s.managementIp += "/";
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
if (nm == "tun") {
s.isL2 = false;
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
} else {
s.isL2 = true;
s.dataIp = "0.0.0.0";
}
s.dataMtu = 1500;
{ {
std::lock_guard lock2(this->networkSettingsMutex); std::lock_guard lock2(this->networkSettingsMutex);
this->networkSettings = s; this->networkSettings = s;
@ -1111,12 +1085,11 @@ std::string api_driver::ApiDriver::loadSettings() const {
result << ",\"qosProfile\":" << qosClasses; result << ",\"qosProfile\":" << qosClasses;
// сеть // сеть
result << "\n,\"netManagementIp\":" << buildEscapedString(network.managementIp); result << ",\"netManagementIp\":\n" << buildEscapedString(network.managementIp);
result << ",\"netIsL2\":" << boolAsStr(network.isL2); result << ",\"netIsL2\":\n" << boolAsStr(network.isL2);
result << ",\"netManagementGateway\":" << buildEscapedString(network.managementGateway); result << ",\"netManagementGateway\":\n" << buildEscapedString(network.managementGateway);
result << ",\"netDataIp\":" << buildEscapedString(network.dataIp); result << ",\"netDataIp\":\n" << buildEscapedString(network.dataIp);
result << ",\"netDataMtu\":" << network.dataMtu; result << ",\"netDataMtu\":\n" << network.dataMtu;
result << ",\"netServerName\":" << buildEscapedString(network.serverName);
result << "}"; result << "}";
return result.str(); return result.str();
@ -1302,7 +1275,6 @@ void api_driver::ApiDriver::setNetworkSettings(boost::property_tree::ptree &pt)
s.isL2 = pt.get<bool>("netIsL2"); s.isL2 = pt.get<bool>("netIsL2");
s.dataIp = pt.get<std::string>("netDataIp"); s.dataIp = pt.get<std::string>("netDataIp");
s.dataMtu = pt.get<unsigned int>("netDataMtu"); s.dataMtu = pt.get<unsigned int>("netDataMtu");
s.serverName = pt.get<std::string>("netServerName");
daemon->setNetworkSettings(s); daemon->setNetworkSettings(s);
} }

View File

@ -190,7 +190,7 @@
fetch(`/dev/logs.csv`, {method: 'GET', credentials: 'same-origin' }) fetch(`/dev/logs.csv`, {method: 'GET', credentials: 'same-origin' })
.then(async (resp) => { .then(async (resp) => {
let logfileContent = await resp.text() let logfileContent = await resp.text()
const lines = logfileContent.trim().split(/\r\n|\n/) const lines = logfileContent.split(/\r\n|\n/)
// Первая строка содержит заголовки // Первая строка содержит заголовки
this.logsTable.headers = lines.shift().split('\t') this.logsTable.headers = lines.shift().split('\t')

View File

@ -514,10 +514,6 @@
<input v-model="paramNetwork.netDataIp" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"> <input v-model="paramNetwork.netDataIp" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
</label> </label>
<label><span>MTU интерфейса данных</span><input type="number" v-model="paramNetwork.netDataMtu" min="1500" max="2000" step="1"/></label> <label><span>MTU интерфейса данных</span><input type="number" v-model="paramNetwork.netDataMtu" min="1500" max="2000" step="1"/></label>
<label>
<span>Имя веб-сервера</span>
<input v-model="paramNetwork.netServerName" type="text">
</label>
</div> </div>
<button class="action-button" @click="settingsSubmitNetwork()">Сохранить <span class="submit-spinner" v-show="submitStatus.network"></span></button> <button class="action-button" @click="settingsSubmitNetwork()">Сохранить <span class="submit-spinner" v-show="submitStatus.network"></span></button>
@ -643,7 +639,6 @@
netIsL2: false, netIsL2: false,
netDataIp: null, netDataIp: null,
netDataMtu: 1500, netDataMtu: 1500,
netServerName: null,
}, },
// ========== include end from 'common/all-params-data.js.j2' // ========== include end from 'common/all-params-data.js.j2'
@ -876,7 +871,6 @@
"netIsL2": this.paramNetwork.netIsL2, "netIsL2": this.paramNetwork.netIsL2,
"netDataIp": this.paramNetwork.netDataIp, "netDataIp": this.paramNetwork.netDataIp,
"netDataMtu": this.paramNetwork.netDataMtu, "netDataMtu": this.paramNetwork.netDataMtu,
"netServerName": this.paramNetwork.netServerName,
} }
this.submitStatus.network = true this.submitStatus.network = true
@ -950,7 +944,6 @@
this.paramNetwork.netIsL2 = vals["settings"]["netIsL2"] this.paramNetwork.netIsL2 = vals["settings"]["netIsL2"]
this.paramNetwork.netDataIp = vals["settings"]["netDataIp"] this.paramNetwork.netDataIp = vals["settings"]["netDataIp"]
this.paramNetwork.netDataMtu = vals["settings"]["netDataMtu"] this.paramNetwork.netDataMtu = vals["settings"]["netDataMtu"]
this.paramNetwork.netServerName = vals["settings"]["netServerName"]
}, },
// ========== include end from 'common/all-params-methods.js.j2' // ========== include end from 'common/all-params-methods.js.j2'
@ -1386,10 +1379,6 @@
this.updateTcpaccelSettings(vals) this.updateTcpaccelSettings(vals)
this.updateNetworkSettings(vals) this.updateNetworkSettings(vals)
this.updateQosSettings(vals) this.updateQosSettings(vals)
if ('netServerName' in vals['settings']) {
document.getElementsByTagName('title')[0].innerText = vals['settings']['netServerName']
}
} }
doFetchSettings().then(() => {}) doFetchSettings().then(() => {})

View File

@ -221,10 +221,6 @@
<input v-model="paramNetwork.netDataIp" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"> <input v-model="paramNetwork.netDataIp" required type="text" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
</label> </label>
<label><span>MTU интерфейса данных</span><input type="number" v-model="paramNetwork.netDataMtu" min="1500" max="2000" step="1"/></label> <label><span>MTU интерфейса данных</span><input type="number" v-model="paramNetwork.netDataMtu" min="1500" max="2000" step="1"/></label>
<label>
<span>Имя веб-сервера</span>
<input v-model="paramNetwork.netServerName" type="text">
</label>
</div> </div>
<button class="action-button" @click="settingsSubmitNetwork()">Сохранить <span class="submit-spinner" v-show="submitStatus.network"></span></button> <button class="action-button" @click="settingsSubmitNetwork()">Сохранить <span class="submit-spinner" v-show="submitStatus.network"></span></button>
@ -314,7 +310,6 @@
netIsL2: false, netIsL2: false,
netDataIp: null, netDataIp: null,
netDataMtu: 1500, netDataMtu: 1500,
netServerName: null,
}, },
// ========== include end from 'common/all-params-data.js.j2' // ========== include end from 'common/all-params-data.js.j2'
@ -476,7 +471,6 @@
"netIsL2": this.paramNetwork.netIsL2, "netIsL2": this.paramNetwork.netIsL2,
"netDataIp": this.paramNetwork.netDataIp, "netDataIp": this.paramNetwork.netDataIp,
"netDataMtu": this.paramNetwork.netDataMtu, "netDataMtu": this.paramNetwork.netDataMtu,
"netServerName": this.paramNetwork.netServerName,
} }
this.submitStatus.network = true this.submitStatus.network = true
@ -514,7 +508,6 @@
this.paramNetwork.netIsL2 = vals["settings"]["netIsL2"] this.paramNetwork.netIsL2 = vals["settings"]["netIsL2"]
this.paramNetwork.netDataIp = vals["settings"]["netDataIp"] this.paramNetwork.netDataIp = vals["settings"]["netDataIp"]
this.paramNetwork.netDataMtu = vals["settings"]["netDataMtu"] this.paramNetwork.netDataMtu = vals["settings"]["netDataMtu"]
this.paramNetwork.netServerName = vals["settings"]["netServerName"]
}, },
// ========== include end from 'common/all-params-methods.js.j2' // ========== include end from 'common/all-params-methods.js.j2'
@ -682,10 +675,6 @@
this.updateRxtxSettings(vals) this.updateRxtxSettings(vals)
this.updateBuclnbSettings(vals) this.updateBuclnbSettings(vals)
this.updateNetworkSettings(vals) this.updateNetworkSettings(vals)
if ('netServerName' in vals['settings']) {
document.getElementsByTagName('title')[0].innerText = vals['settings']['netServerName']
}
} }
doFetchSettings().then(() => {}) doFetchSettings().then(() => {})