{% macro render_fields(source, form) %} {% for source_field_data in source %} {% if source_field_data is not string %} {% set field = source_field_data[0] %} {% set args = source_field_data[1:] %} {% else %} {% set field = source_field_data %} {% set args = [] %} {% endif %} {% if form[field].type == "BooleanField" %} {{ render_checkbox(form[field]) }} {% elif form[field].type == "SelectField" %} {{ render_select(form[field], *args) }} {% elif form[field].type == "RadioField" %} {{ render_radio(form[field]) }} {% else %} {{ render_field(form[field], *args) }} {% endif %} {% endfor %} {% endmacro %} {% macro render_radio(radiofield) -%}
{{ radiofield.label(class="col-form-label", title=radiofield.description, **{"data-toggle":"tooltip", "data-placement":"right"}) }}
{% for radio in radiofield %}
{{ radio(class="radio") }} {{ radio.label(class="col-form-label") }}
{% endfor %}
{% if radiofield.form_errors %} {% for error in radiofield.form_errors %}
{{ error }}
{% endfor %} {% endif %}
{% endmacro %} {% macro render_select(selectfield, style, formtype) %}
{{ selectfield.label(class="col-form-label", title=selectfield.description, **{"data-toggle":"tooltip", "data-placement":"right"}) }}
{{ selectfield(class="form-control", **{"data-toggle":"tooltip", "data-placement":"top"}) }}
{% if selectfield.form_errors %} {% for error in selectfield.form_errors %}
{{ error }}
{% endfor %} {% endif %}
{% endmacro %} {% macro render_field(field, style, formtype) %}
{{ field.label(title=field.description, class="col-form-label", **{"data-toggle":"tooltip", "data-placement":"right"}) }}
{{ field(title=field.description, class="form-control", autocomplete="off", **{"data-toggle":"tooltip", "data-placement":"top"}) }}
{% if field.form_errors %} {% for error in field.form_errors %}
{{ error }}
{% endfor %} {% endif %}
{% endmacro %} {% macro render_checkbox(field) %}
{{ field.label(title=field.description, class="col-form-label", **{"data-toggle":"tooltip", "data-placement":"right"}) }}
{{ field(title=field.description, **{"data-toggle":"tooltip", "data-placement":"top"}) }}
{% if field.form_errors %} {% for error in field.form_errors %}
{{ error }}
{% endfor %} {% endif %}
{% endmacro %} {% macro _render_resources_table(resource_table_data) %} {% if resource_table_data %} {% for element in resource_table_data[0] %} {% endfor %} {% for row in resource_table_data[1:] %} {% for element in row[1:-1] %} {% endfor %} {% endfor %}
{{ element }}
{{ row[0] }}{{ element }}{{ row[-1] }}
{% endif %} {% endmacro %} {% macro render_quota_project(quota) %} {% if not quota.abc_service.slug %} unknown {% else %} {{ quota.abc_service.hr_name or quota.abc_service.slug}} {% endif %} {{ _render_resources_table(quota.get_table_view()) }} {{ _render_resources_table(quota.get_quota_table_view()) }} {{ _render_resources_table(quota.get_free_table_view()) }} {% endmacro %} {% macro render_quota_subproject(subproject) %}
{% if not subproject.abc_service.slug %} unknown {% else %} {{ subproject.abc_service.hr_name or subproject.abc_service.slug}} {% endif %}
{{ _render_resources_table(subproject.get_table_view()) }} {% endmacro %} {% macro render_quota_service(service) %} {{ service.ctype }}/{{ service.name }} {{ _render_resources_table(service.get_table_view()) }} {% endmacro %} {% macro render_testing_form(form) %}
{{ form.hidden_tag() }}
Основные параметры
{{ render_fields(["service_name", "abc_user_service", "abc_quota_service", "owners_list", "service_type"], form) }}
Ресурсы
{{ render_field(form.instances_count) }}
{{ render_field(form.comment) }}
Если сервис не будет использоваться более 3 месяцев, он будет автоматически разобран
{{ form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_prestable_form(form) %}
{{ form.hidden_tag() }}
Основные параметры
{{ render_fields(["service_name", "abc_user_service", "abc_quota_service", "owners_list", "service_ctype", "service_type", ["delivery_type", "", "prestable"]], form) }}

Параметры доставки данных
{{ render_fields(["yt_cluster", "yt_ferryman_format", ["logbroker_tvm_id", "display: none", ""], ["logbroker_traffic_volume", "display: none", ""]], form) }}
Параметры безопасности
{{ render_fields(["service_tvm", "service_saas_tvm"], form) }}
Ресурсы
{{ render_fields(["instances_count", "memory_requirements", "cpu_requirements", "replicas_per_dc"], form) }}
{{ render_field(form.comment) }} {{ form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_production_form(form) %}
{{ form.hidden_tag() }}
Основные параметры
{{ render_fields(["service_name", "abc_user_service", "abc_quota_service", "owners_list", "service_ctype", "service_type", ["delivery_type", "", "production"]], form) }}

Параметры доставки данных
{{ render_fields(["yt_cluster", "yt_ferryman_format", ["logbroker_tvm_id", "display: none", ""], ["logbroker_traffic_volume", "display: none", ""]], form) }}
Параметры безопасности
{{ render_fields(["service_tvm", "service_saas_tvm"], form) }}
Параметры SLA
{{ render_fields(["search_rps", "index_size", "maxdocs", "search_q_99_ms", "search_q_999_ms"], form) }}
Ресурсы
{{ render_fields(["instances_count", "memory_requirements", "cpu_requirements", "replicas_per_dc"], form) }}
{{ render_field(form.comment) }} {{ form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_namespace_form(form) %}
{{ form.hidden_tag() }}
Основные параметры
{{ render_fields(["namespace_name", "owners_list", "ferryman_service"], form) }}
Ресурсы
{{ render_fields(["namespace_size", "namespace_doccount"], form) }}
{{ render_field(form.comment) }} {{ form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_shooting_form(form) %}
{{ form.hidden_tag() }}
Настройки стрельбы
{{ render_fields(["ammo_file", "service", "source_service", "ticket", "locations", "ctype", "target_rps", "store_requests_info", "requests_info_find_by"], form) }}
{{ form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_regular_shooting_form(regular_form) %}
{{ regular_form.hidden_tag() }}
Регулярные настройки
{% if regular_form.scheduler_id.data %} {{ render_fields(["scheduler_id", "ammo_file", "start_time", "repetition_interval", "service", "source_service", "ticket", "locations", "ctype", "target_rps", "responsibles", "notify_time", "send_results_to_uchenki", "status"], regular_form) }} {% else %} {{ render_fields(["ammo_file", "start_time", "repetition_interval", "service", "source_service", "ticket", "locations", "ctype", "target_rps", "responsibles", "notify_time", "send_results_to_uchenki", "status"], regular_form) }} {% endif %}
{{ regular_form.submit(class_='btn btn-light') }}
{% endmacro %} {% macro render_shooting_table(table) %}
Таблица регулярных стрельб

{% for el in ["Scheduler id", "Service", "Ctype", "Ticket", "Target rps", "Start time"] %} {% endfor %} {% for field, shooting, rps in table %} {% if field['status'] %} {% else %} {% endif %} {% endfor %}
{{ el }}
{{ field['scheduler_id'] }} {{ field['service'] }} {{ field['ctype'] }} {{ field['ticket'] }} {{ rps }} {{ field['next_time'] }} Запустить Остановить Редактировать Удалить {% if shooting %} {% if shooting['status'] in ["EXCEPTION", "STOPPED"] %} {% elif shooting['status'] == "SUCCESS" %} {% else %} {% endif %} {% endif %}

Добавить {% endmacro %} {% macro nav_link(endpoint, name) %} {% if request.endpoint.endswith(endpoint) %} {% else %} {% endif %} {% endmacro %} {% macro findkey_form(findkey_form, admin_mode=False) %}
{{ findkey_form.hidden_tag() }}
Настройки поиска
{% set fields_to_render = ["service", "ctype", "url", "kps", "yql_day_count", "use_tvm", "src_tvm_id", "ignore_dc"] %} {{ render_fields(fields_to_render, findkey_form) }} {{ render_fields(["kv_or_ft"], findkey_form) }} {% if admin_mode %}
Продвинутые настройки (Только для Администраторов SaaS)
{{ render_fields(["dst_tvm_id", "yql_df_dst_table", "yql_index_dst_table", "ferryman_host", "ferryman_show_found"], findkey_form) }} {% endif %}
{{ findkey_form.submit(class_='btn btn-light') }}
{% endmacro %}