├── .cartridge.yml ├── .eslintignore ├── .gitattributes ├── .github ├── pull_request_template.md └── workflows │ ├── backend-test.yml │ ├── compatibility-test.yml │ ├── frontend-test.yml │ ├── nightly-test.yml │ ├── publish.yml │ ├── pull-translation.yml │ ├── push-translation.yml │ ├── reusable-backend-test.yml │ └── upload-translations.yml ├── .gitignore ├── .graphqlconfig.yaml ├── .luacheckrc ├── .luacov ├── .prettierignore ├── CHANGELOG.rst ├── CMakeLists.txt ├── CONTRIBUTING.rst ├── LICENSE ├── README.rst ├── cartridge-scm-1.rockspec ├── cartridge.lua ├── cartridge.png ├── cartridge ├── VERSION.lua ├── admin.lua ├── argparse.lua ├── auth-backend.lua ├── auth.lua ├── cluster-cookie.lua ├── clusterwide-config.lua ├── confapplier.lua ├── etcd2-client.lua ├── etcd2.lua ├── failover.lua ├── failover │ ├── leader_autoreturn.lua │ └── raft.lua ├── feedback.lua ├── funcall.lua ├── graphql.lua ├── graphql │ ├── execute.lua │ ├── funcall.lua │ ├── parse.lua │ ├── schema.lua │ ├── types.lua │ └── validate.lua ├── hotreload.lua ├── invalid-format.lua ├── issues.lua ├── label-utils.lua ├── logging_whitelist.lua ├── lua-api │ ├── boxinfo.lua │ ├── compression.lua │ ├── deprecated.lua │ ├── edit-topology.lua │ ├── failover.lua │ ├── get-topology.lua │ ├── proxy.lua │ ├── stat.lua │ ├── topology.lua │ └── vshard.lua ├── pool.lua ├── remote-control.lua ├── roles.lua ├── roles │ ├── coordinator.lua │ ├── vshard-router.lua │ └── vshard-storage.lua ├── rpc.lua ├── service-registry.lua ├── sslsocket.lua ├── stateboard-client.lua ├── stateboard.lua ├── sync-spaces.lua ├── tar.lua ├── test-helpers.lua ├── test-helpers │ ├── cluster.lua │ ├── etcd.lua │ ├── server.lua │ └── stateboard.lua ├── topology.lua ├── twophase.lua ├── upload.lua ├── user-defined-role.lua ├── utils.lua ├── vars.lua ├── vshard-utils.lua ├── webui.lua └── webui │ ├── api-auth.lua │ ├── api-compression.lua │ ├── api-config.lua │ ├── api-ddl.lua │ ├── api-failover.lua │ ├── api-issues.lua │ ├── api-suggestions.lua │ ├── api-topology.lua │ ├── api-vshard.lua │ ├── gql-boxinfo.lua │ └── gql-stat.lua ├── cmake ├── FindLdoc.cmake ├── FindSphinx.cmake └── FindTarantool.cmake ├── config.ld ├── crowdin.yaml ├── cypress-test.sh ├── doc └── schema.graphql ├── fetch-schema.sh ├── frontend-test.sh ├── full-cluster.png ├── instances.yml ├── push_test_results.sh ├── pytest.ini ├── replicasets.yml ├── rst ├── BuildUML.cmake ├── LuaLexer.py ├── TarantoolSessionLexer.py ├── cartridge_admin.rst ├── cartridge_dev.rst ├── conf.py ├── images │ ├── applied-migrations.png │ ├── auth_creds.png │ ├── bootstrap-vshard.png │ ├── cartridge-issues-alien-uuid.png │ ├── cartridge-issues-config-mismatch.png │ ├── cartridge-issues-force-apply.png │ ├── cartridge-issues-high-lag.png │ ├── cartridge-issues-replication-details.png │ ├── cartridge-server-details-button.png │ ├── cartridge-server-details.png │ ├── change-weight.png │ ├── cluster-issues-replication.png │ ├── compression-suggestion-1.png │ ├── compression-suggestion-2.png │ ├── compression-suggestion-3.png │ ├── create-router.png │ ├── create-storage.png │ ├── dead-replicaset-issue.png │ ├── dead-replicaset.png │ ├── disable-instance.png │ ├── disable-instances-suggestion.png │ ├── disabled-instance.png │ ├── edit-replica-set.png │ ├── expelling-instance.png │ ├── failover-button.png │ ├── failover-disabled.png │ ├── failover-eventual.png │ ├── failover-priority.png │ ├── failover-promote.png │ ├── failover-raft.png │ ├── failover-stateful.png │ ├── final-cluster.png │ ├── join-storage.png │ ├── migrations.png │ ├── non_electable.png │ ├── probe-server.png │ ├── rebalancer-flags.png │ ├── rebalancer-instance-button.png │ ├── rebalancer-instance.png │ ├── rebalancer-mode.png │ ├── rebalancer-replicaset.png │ ├── router-replica-set.png │ ├── set-zone.png │ ├── set_non_electable.png │ ├── state-provider-status.png │ ├── stuck-connecting-fullmesh.png │ ├── switch-master.png │ ├── uml │ │ ├── ConfigFound.svg │ │ ├── ConfigLoaded.svg │ │ ├── ConfiguringRoles.svg │ │ ├── ConnectingFullmesh.svg │ │ ├── InitialState.svg │ │ ├── Recovery.svg │ │ ├── Unconfigured.svg │ │ └── state-machine.svg │ ├── unconfigured-router.png │ ├── users-tab.png │ ├── zero-weight.png │ └── zero.png ├── index.rst ├── locale │ ├── cleanup.py │ └── ru │ │ └── LC_MESSAGES │ │ ├── cartridge_admin.po │ │ ├── cartridge_cli.po │ │ ├── cartridge_dev.po │ │ ├── cartridge_overview.po │ │ ├── index.po │ │ └── troubleshooting.po ├── requirements.txt ├── topics │ ├── clusterwide-config.rst │ ├── error-handling.rst │ ├── failover.rst │ └── state-machine.rst ├── troubleshooting.rst └── uml │ ├── ConfigFound.puml │ ├── ConfigLoaded.puml │ ├── ConfiguringRoles.puml │ ├── ConnectingFullmesh.puml │ ├── InitialState.puml │ ├── Recovery.puml │ ├── Unconfigured.puml │ └── state-machine.puml ├── stateboard.init.lua ├── test ├── compatibility │ ├── cartridge_upgrade_test.lua │ └── config_test.lua ├── entrypoint │ ├── srv_basic.lua │ ├── srv_empty.lua │ ├── srv_loghack.lua │ ├── srv_multisharding.lua │ ├── srv_raft.lua │ ├── srv_stateboard.lua │ ├── srv_vshardless.lua │ └── srv_woauth.lua ├── helper.lua ├── hotreload │ ├── forbidden_test.lua │ ├── myrole_test.lua │ ├── pause_test.lua │ ├── vshard_second_test.lua │ └── vshard_test.lua ├── integration │ ├── admin_test.lua │ ├── advertise_change_test.lua │ ├── api_edit_test.lua │ ├── api_join_test.lua │ ├── api_query_test.lua │ ├── api_uninitialized_test.lua │ ├── auth_test.lua │ ├── autodisable_test.lua │ ├── bootstrap_from_test.lua │ ├── bootstrap_test.lua │ ├── clock_delta_test.lua │ ├── compression_test.lua │ ├── config_test.lua │ ├── conftest.py │ ├── console_sock_test.lua │ ├── cookie_change_test.lua │ ├── ddl_test.lua │ ├── disable_test.lua │ ├── disk_failure_test.lua │ ├── electable_test.lua │ ├── etcd2_client_test.lua │ ├── expel_last_instance_test.lua │ ├── expel_test.lua │ ├── failover_eventual_suppressing_test.lua │ ├── failover_eventual_test.lua │ ├── failover_stateful_2_clusters_1_provider_test.lua │ ├── failover_stateful_autoreturn_test.lua │ ├── failover_stateful_expel_test.lua │ ├── failover_stateful_ordinal_changed_test.lua │ ├── failover_stateful_test.lua │ ├── failover_synchro_test.lua │ ├── feedback_test.lua │ ├── fencing_test.lua │ ├── force_reapply_test.lua │ ├── get_candidates_test.lua │ ├── graphql_errstack_test.lua │ ├── graphql_test.lua │ ├── hidden_roles_test.lua │ ├── http_disabled_test.lua │ ├── invalid_format_test.lua │ ├── issues_test.lua │ ├── join_synchronous_test.lua │ ├── join_third_instance_test.lua │ ├── labels_test.lua │ ├── logger_test.lua │ ├── master_restart_test.lua │ ├── multiboot_test.lua │ ├── multijoin_create_test.lua │ ├── multijoin_existing_test.lua │ ├── multisharding_api_test.lua │ ├── multisharding_one_test.lua │ ├── multisharding_partial_test.lua │ ├── multisharding_two_test.lua │ ├── myrole_test.lua │ ├── pool_connect_test.lua │ ├── pool_map_call_test.lua │ ├── proxy_test.lua │ ├── raft_test.lua │ ├── rebalancing_test.lua │ ├── reboot_test.lua │ ├── rejoin_test.lua │ ├── replicaset_alias_test.lua │ ├── requirements.txt │ ├── restart_cluster_test.lua │ ├── restart_replication_test.lua │ ├── rpc_on_expelled_test.lua │ ├── rpc_test.lua │ ├── slow_requests_test.lua │ ├── ssl_cert │ │ ├── ca.crt │ │ ├── ca.key │ │ ├── ca.srl │ │ ├── client.crt │ │ ├── client.enc.key │ │ ├── client.key │ │ ├── gen-gost.sh │ │ ├── gen.sh │ │ ├── gost.crt │ │ ├── gost.key │ │ ├── openssl.cnf │ │ ├── server.crt │ │ ├── server.enc.key │ │ └── server.key │ ├── ssl_enc_test.lua │ ├── ssl_test.lua │ ├── state_machine_test.lua │ ├── stateboard_test.lua │ ├── switchover_test.lua │ ├── test_pass.py │ ├── two_cluster_32_symbol_cookie_test.lua │ ├── two_cluster_test.lua │ ├── twophase_test.lua │ ├── upload_test.lua │ ├── vshard_api_test.lua │ ├── vshard_connection_test.lua │ ├── vshard_doubled_buckets_test.lua │ ├── vshard_rebalancer_api_test.lua │ ├── vshard_replication_order_test.lua │ ├── vshard_storage_disabling_test.lua │ ├── vshard_weight_test.lua │ ├── vshardless_test.lua │ ├── workdir_test.lua │ └── zones_test.lua ├── roles │ ├── api.lua │ └── storage.lua ├── unit │ ├── argparse_test.lua │ ├── cartridge_failover_test.lua │ ├── cfg_errors_test.lua │ ├── cluster_cookie_test.lua │ ├── clusterwide_config_test.lua │ ├── helpers_test.lua │ ├── issues_limits_test.lua │ ├── labels_test.lua │ ├── raft_test.lua │ ├── remote_control_ssl_test.lua │ ├── remote_control_test.lua │ ├── roledeps_test.lua │ ├── rpc_candidates_test.lua │ ├── ssl_cert │ │ ├── ca.crt │ │ ├── ca.key │ │ ├── ca.srl │ │ ├── client.crt │ │ ├── client.enc.key │ │ ├── client.key │ │ ├── gen-gost.sh │ │ ├── gen.sh │ │ ├── gost.crt │ │ ├── gost.key │ │ ├── openssl.cnf │ │ ├── server.crt │ │ ├── server.enc.key │ │ └── server.key │ ├── tar_test.lua │ ├── topology_leaders_test.lua │ ├── topology_test.lua │ ├── upload_test.lua │ ├── utils_test.lua │ ├── vshard_config_test.lua │ └── wait_lsn_test.lua └── upgrade │ ├── .gitignore │ ├── data_1.10.5 │ ├── localhost-13301 │ │ ├── 00000000000000000002.snap │ │ └── config │ │ │ ├── auth.yml │ │ │ ├── topology.yml │ │ │ └── vshard_groups.yml │ ├── localhost-13303 │ │ ├── 00000000000000003036.snap │ │ └── config │ │ │ ├── auth.yml │ │ │ ├── topology.yml │ │ │ └── vshard_groups.yml │ └── localhost-13305 │ │ ├── 00000000000000003036.snap │ │ └── config │ │ ├── auth.yml │ │ ├── topology.yml │ │ └── vshard_groups.yml │ ├── generate_data.lua │ └── tarantool_upgrade_test.lua └── webui ├── .babelrc.js ├── .browserslistrc ├── .env ├── .env.development ├── .env.production ├── .eslintignore ├── .eslintrc.js ├── .flowconfig ├── .gitignore ├── .importsortrc.js ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc.js ├── BuildFrontend.cmake ├── README.md ├── codegen.yml ├── config ├── jest │ ├── cssTransform.js │ └── fileTransform.js └── proxy.config.js ├── cypress.json ├── cypress ├── fixtures │ └── files │ │ ├── config.bad.yml │ │ └── config.good.yml ├── integration │ ├── auth.spec.js │ ├── blacklist-pages.spec.js │ ├── bootstrap.spec.js │ ├── change-advertise-uri.spec.js │ ├── cluster_webUI.spec.js │ ├── code-page.spec.js │ ├── configuration-file-page.spec.js │ ├── demo-panel.spec.js │ ├── disable-server.spec.js │ ├── failover.spec.js │ ├── filtering.spec.js │ ├── force-apply-config.spec.js │ ├── global-401-handler.spec.js │ ├── hide-all-rw-variable.spec.js │ ├── network-error-splash.spec.js │ ├── plugin.spec.js │ ├── probe-server.spec.js │ ├── restart-replication.spec.js │ ├── server-details.spec.js │ ├── sigstop.spec.js │ ├── switchover.spec.js │ ├── uninitialized.spec.js │ ├── users.spec.js │ ├── vshardless.spec.js │ └── webui-features.spec.js ├── plugins │ └── index.js ├── snapshots │ ├── auth.spec.js │ │ ├── LoginForm.1260x760.snap.png │ │ ├── LoginForm.1280x720.snap.png │ │ ├── LoginForm.1440x900.snap.png │ │ ├── LoginForm.1920x1080.snap.png │ │ ├── LoginSplash.1260x760.snap.png │ │ ├── LoginSplash.1280x720.snap.png │ │ ├── LoginSplash.1440x900.snap.png │ │ ├── LoginSplash.1920x1080.snap.png │ │ ├── UsersPage.1260x760.snap.png │ │ ├── UsersPage.1280x720.snap.png │ │ ├── UsersPage.1440x900.snap.png │ │ └── UsersPage.1920x1080.snap.png │ ├── bootstrap.spec.js │ │ ├── 3UnconfiguredServers.1260x760.snap.png │ │ ├── 3UnconfiguredServers.1280x720.snap.png │ │ ├── 3UnconfiguredServers.1440x900.snap.png │ │ ├── 3UnconfiguredServers.1920x1080.snap.png │ │ ├── ConfigurationServer.1260x760.snap.png │ │ ├── ConfigurationServer.1280x720.snap.png │ │ ├── ConfigurationServer.1440x900.snap.png │ │ ├── ConfigurationServer.1920x1080.snap.png │ │ ├── ExpelServer.1260x760.snap.png │ │ ├── ExpelServer.1280x720.snap.png │ │ ├── ExpelServer.1440x900.snap.png │ │ ├── ExpelServer.1920x1080.snap.png │ │ ├── ReplicaserServerDropdown.1260x760.snap.png │ │ ├── ReplicaserServerDropdown.1280x720.snap.png │ │ ├── ReplicaserServerDropdown.1440x900.snap.png │ │ └── ReplicaserServerDropdown.1920x1080.snap.png │ ├── code-page.spec.js │ │ ├── BaseCodePage.1260x760.snap.png │ │ ├── BaseCodePage.1280x720.snap.png │ │ ├── BaseCodePage.1440x900.snap.png │ │ ├── BaseCodePage.1920x1080.snap.png │ │ ├── DeleteFileModalWindow.1260x760.snap.png │ │ ├── DeleteFileModalWindow.1280x720.snap.png │ │ ├── DeleteFileModalWindow.1440x900.snap.png │ │ ├── DeleteFileModalWindow.1920x1080.snap.png │ │ ├── ReloadFilesWindow.1260x760.snap.png │ │ ├── ReloadFilesWindow.1280x720.snap.png │ │ ├── ReloadFilesWindow.1440x900.snap.png │ │ ├── ReloadFilesWindow.1920x1080.snap.png │ │ └── gh-1201.snap.png │ ├── configuration-file-page.spec.js │ │ ├── ConfigurationFilePage.1260x760.snap.png │ │ ├── ConfigurationFilePage.1280x720.snap.png │ │ ├── ConfigurationFilePage.1440x900.snap.png │ │ └── ConfigurationFilePage.1920x1080.snap.png │ ├── disable-server.spec.js │ │ ├── ClusterSuggestionsPanel.1260x760.snap.png │ │ ├── ClusterSuggestionsPanel.1280x720.snap.png │ │ ├── ClusterSuggestionsPanel.1440x900.snap.png │ │ ├── ClusterSuggestionsPanel.1920x1080.snap.png │ │ ├── ServerDetailsModalServerDead.1260x760.snap.png │ │ ├── ServerDetailsModalServerDead.1280x720.snap.png │ │ ├── ServerDetailsModalServerDead.1440x900.snap.png │ │ └── ServerDetailsModalServerDead.1920x1080.snap.png │ ├── failover.spec.js │ │ ├── ClusterIssuesModal.1260x760.snap.png │ │ ├── ClusterIssuesModal.1280x720.snap.png │ │ ├── ClusterIssuesModal.1440x900.snap.png │ │ ├── ClusterIssuesModal.1920x1080.snap.png │ │ ├── FailoverControlDisabled.1260x760.snap.png │ │ ├── FailoverControlDisabled.1280x720.snap.png │ │ ├── FailoverControlDisabled.1440x900.snap.png │ │ ├── FailoverControlDisabled.1920x1080.snap.png │ │ ├── FailoverControlEvantual.1260x760.snap.png │ │ ├── FailoverControlEvantual.1280x720.snap.png │ │ ├── FailoverControlEvantual.1440x900.snap.png │ │ ├── FailoverControlEvantual.1920x1080.snap.png │ │ ├── FailoverModalEvantualEtcd.1260x760.snap.png │ │ ├── FailoverModalEvantualEtcd.1280x720.snap.png │ │ ├── FailoverModalEvantualEtcd.1440x900.snap.png │ │ ├── FailoverModalEvantualEtcd.1920x1080.snap.png │ │ ├── FailoverModalStatefulTarantoolMode.1260x760.snap.png │ │ ├── FailoverModalStatefulTarantoolMode.1280x720.snap.png │ │ ├── FailoverModalStatefulTarantoolMode.1440x900.snap.png │ │ └── FailoverModalStatefulTarantoolMode.1920x1080.snap.png │ ├── force-apply-config.spec.js │ │ ├── ClusterSuggestionsModal.1260x760.snap.png │ │ ├── ClusterSuggestionsModal.1280x720.snap.png │ │ ├── ClusterSuggestionsModal.1440x900.snap.png │ │ ├── ClusterSuggestionsModal.1920x1080.snap.png │ │ ├── ClusterSuggestionsPanel.1260x760.snap.png │ │ ├── ClusterSuggestionsPanel.1280x720.snap.png │ │ ├── ClusterSuggestionsPanel.1440x900.snap.png │ │ └── ClusterSuggestionsPanel.1920x1080.snap.png │ ├── network-error-splash.spec.js │ │ ├── NetworkProblemsCluster.1260x760.snap.png │ │ ├── NetworkProblemsCluster.1280x720.snap.png │ │ ├── NetworkProblemsCluster.1440x900.snap.png │ │ ├── NetworkProblemsCluster.1920x1080.snap.png │ │ ├── NetworkProblemsCode.1260x760.snap.png │ │ ├── NetworkProblemsCode.1280x720.snap.png │ │ ├── NetworkProblemsCode.1440x900.snap.png │ │ ├── NetworkProblemsCode.1920x1080.snap.png │ │ ├── NetworkProblemsConfFile.1260x760.snap.png │ │ ├── NetworkProblemsConfFile.1280x720.snap.png │ │ ├── NetworkProblemsConfFile.1440x900.snap.png │ │ ├── NetworkProblemsConfFile.1920x1080.snap.png │ │ ├── NetworkProblemsUsers.1260x760.snap.png │ │ ├── NetworkProblemsUsers.1280x720.snap.png │ │ ├── NetworkProblemsUsers.1440x900.snap.png │ │ └── NetworkProblemsUsers.1920x1080.snap.png │ ├── probe-server.spec.js │ │ ├── ProbeServerModal.1260x760.snap.png │ │ ├── ProbeServerModal.1280x720.snap.png │ │ ├── ProbeServerModal.1440x900.snap.png │ │ └── ProbeServerModal.1920x1080.snap.png │ ├── restart-replication.spec.js │ │ ├── ClusterSuggestionsPanel.1260x760.snap.png │ │ ├── ClusterSuggestionsPanel.1280x720.snap.png │ │ ├── ClusterSuggestionsPanel.1440x900.snap.png │ │ ├── ClusterSuggestionsPanel.1920x1080.snap.png │ │ ├── RestartReplicationSuggestionModal.1260x760.snap.png │ │ ├── RestartReplicationSuggestionModal.1280x720.snap.png │ │ ├── RestartReplicationSuggestionModal.1440x900.snap.png │ │ └── RestartReplicationSuggestionModal.1920x1080.snap.png │ ├── server-details.spec.js │ │ ├── ActiveZoneSection.1260x760.snap.png │ │ ├── ActiveZoneSection.1280x720.snap.png │ │ ├── ActiveZoneSection.1440x900.snap.png │ │ ├── ActiveZoneSection.1920x1080.snap.png │ │ ├── EmptyZoneSection.1260x760.snap.png │ │ ├── EmptyZoneSection.1280x720.snap.png │ │ ├── EmptyZoneSection.1440x900.snap.png │ │ ├── EmptyZoneSection.1920x1080.snap.png │ │ ├── ServerDetailsModalCartridge1.1260x760.snap.png │ │ ├── ServerDetailsModalCartridge1.1280x720.snap.png │ │ ├── ServerDetailsModalCartridge1.1440x900.snap.png │ │ ├── ServerDetailsModalCartridge1.1920x1080.snap.png │ │ ├── ServerDetailsModalGeneral1.1260x760.snap.png │ │ ├── ServerDetailsModalGeneral1.1280x720.snap.png │ │ ├── ServerDetailsModalGeneral1.1440x900.snap.png │ │ ├── ServerDetailsModalGeneral1.1920x1080.snap.png │ │ ├── ServerDetailsModalIssues1.1260x760.snap.png │ │ ├── ServerDetailsModalIssues1.1280x720.snap.png │ │ ├── ServerDetailsModalIssues1.1440x900.snap.png │ │ ├── ServerDetailsModalIssues1.1920x1080.snap.png │ │ ├── ServerDetailsModalMembership1.1260x760.snap.png │ │ ├── ServerDetailsModalMembership1.1280x720.snap.png │ │ ├── ServerDetailsModalMembership1.1440x900.snap.png │ │ ├── ServerDetailsModalMembership1.1920x1080.snap.png │ │ ├── ServerDetailsModalNetwork1.1260x760.snap.png │ │ ├── ServerDetailsModalNetwork1.1280x720.snap.png │ │ ├── ServerDetailsModalNetwork1.1440x900.snap.png │ │ ├── ServerDetailsModalNetwork1.1920x1080.snap.png │ │ ├── ServerDetailsModalReplication1.1260x760.snap.png │ │ ├── ServerDetailsModalReplication1.1280x720.snap.png │ │ ├── ServerDetailsModalReplication1.1440x900.snap.png │ │ ├── ServerDetailsModalReplication1.1920x1080.snap.png │ │ ├── ServerDetailsModalStorage1.1260x760.snap.png │ │ ├── ServerDetailsModalStorage1.1280x720.snap.png │ │ ├── ServerDetailsModalStorage1.1440x900.snap.png │ │ ├── ServerDetailsModalStorage1.1920x1080.snap.png │ │ ├── ServerDetailsModalVshard-Router1.1260x760.snap.png │ │ ├── ServerDetailsModalVshard-Router1.1280x720.snap.png │ │ ├── ServerDetailsModalVshard-Router1.1440x900.snap.png │ │ ├── ServerDetailsModalVshard-Router1.1920x1080.snap.png │ │ ├── ServerDetailsModalVshard-Storage1.1260x760.snap.png │ │ ├── ServerDetailsModalVshard-Storage1.1280x720.snap.png │ │ ├── ServerDetailsModalVshard-Storage1.1440x900.snap.png │ │ ├── ServerDetailsModalVshard-Storage1.1920x1080.snap.png │ │ ├── ZoneAddModal.1260x760.snap.png │ │ ├── ZoneAddModal.1280x720.snap.png │ │ ├── ZoneAddModal.1440x900.snap.png │ │ └── ZoneAddModal.1920x1080.snap.png │ ├── switchover.spec.js │ │ ├── Dashboard.1260x760.snap.png │ │ ├── Dashboard.1280x720.snap.png │ │ ├── Dashboard.1440x900.snap.png │ │ ├── Dashboard.1920x1080.snap.png │ │ ├── FailoverModalDisabled.1260x760.snap.png │ │ ├── FailoverModalDisabled.1280x720.snap.png │ │ ├── FailoverModalDisabled.1440x900.snap.png │ │ ├── FailoverModalDisabled.1920x1080.snap.png │ │ ├── FailoverModalEventual.1260x760.snap.png │ │ ├── FailoverModalEventual.1280x720.snap.png │ │ ├── FailoverModalEventual.1440x900.snap.png │ │ ├── FailoverModalEventual.1920x1080.snap.png │ │ ├── FailoverModalStateful.1260x760.snap.png │ │ ├── FailoverModalStateful.1280x720.snap.png │ │ ├── FailoverModalStateful.1440x900.snap.png │ │ └── FailoverModalStateful.1920x1080.snap.png │ └── users.spec.js │ │ ├── EditUserForm.1260x760.snap.png │ │ ├── EditUserForm.1280x720.snap.png │ │ ├── EditUserForm.1440x900.snap.png │ │ ├── EditUserForm.1920x1080.snap.png │ │ ├── LoginForm.1260x760.snap.png │ │ ├── LoginForm.1280x720.snap.png │ │ ├── LoginForm.1440x900.snap.png │ │ ├── LoginForm.1920x1080.snap.png │ │ ├── LoginSplash.1260x760.snap.png │ │ ├── LoginSplash.1280x720.snap.png │ │ ├── LoginSplash.1440x900.snap.png │ │ ├── LoginSplash.1920x1080.snap.png │ │ ├── UserRemoveModal.1260x760.snap.png │ │ ├── UserRemoveModal.1280x720.snap.png │ │ ├── UserRemoveModal.1440x900.snap.png │ │ ├── UserRemoveModal.1920x1080.snap.png │ │ ├── UsersPage.1260x760.snap.png │ │ ├── UsersPage.1280x720.snap.png │ │ ├── UsersPage.1440x900.snap.png │ │ └── UsersPage.1920x1080.snap.png └── support │ ├── commands.js │ └── index.js ├── example.lua ├── flow-typed ├── graphql-introspection.flow.js ├── icon.js ├── npm │ ├── jest_v24.x.x.js │ └── react-router-dom_v4.x.x.js ├── redux.js └── utils.js ├── jest.config.js ├── module-config.json ├── package-lock.json ├── package.json ├── public └── index.html ├── scripts └── test.js ├── src ├── api │ ├── graphql.js │ ├── graphql.test.js │ ├── index.js │ ├── rest.js │ └── utils.js ├── apiEndpoints.js ├── components │ ├── AdvertiseURISuggestionModal.js │ ├── AuthSessionChangeModal │ │ ├── AuthSessionChangeModal.styles.ts │ │ ├── AuthSessionChangeModal.tsx │ │ └── index.ts │ ├── AuthToggleButton.js │ ├── BootstrapButton.js │ ├── BootstrapPanel.js │ ├── ClusterButtonsPanel.js │ ├── ClusterIssuesButton.js │ ├── ClusterIssuesModal.js │ ├── ClusterSuggestionsPanel.js │ ├── ConfigureServerModal.js │ ├── CreateReplicasetForm.js │ ├── DemoInfo.js │ ├── DisableServersSuggestionModal.js │ ├── EditReplicasetForm.js │ ├── EditReplicasetModal.js │ ├── ExpelServerModal.js │ ├── FailoverButton.js │ ├── FailoverModal.js │ ├── ForceApplySuggestionModal.js │ ├── HeaderAuthControl │ │ └── index.js │ ├── HealthStatus.js │ ├── JoinReplicasetForm.js │ ├── Label.js │ ├── LeaderLabel │ │ └── index.js │ ├── LogInForm │ │ └── index.js │ ├── MonacoEditor │ │ └── index.js │ ├── NetworkErrorSplash │ │ ├── NetworkErrorSplash.tsx │ │ └── index.ts │ ├── PageDataErrorMessage │ │ ├── PageDataErrorMessage.tsx │ │ └── index.ts │ ├── PageLayout.js │ ├── Panel.js │ ├── ProbeServerModal.js │ ├── ReplicasetFilterInput.js │ ├── ReplicasetList │ │ ├── ReplicasetList.js │ │ └── index.js │ ├── ReplicasetRoles.js │ ├── ReplicasetServerList.js │ ├── ReplicasetServerListItem.js │ ├── RestartReplicationsSuggestionModal.js │ ├── SectionLoadError.js │ ├── SelectedReplicaset.js │ ├── SelectedServersList.js │ ├── ServerDetailsModal │ │ ├── CollapsibleJSONRenderer.js │ │ ├── ServerDetailsModalIssues.js │ │ ├── ServerDetailsModalStatTab.js │ │ ├── ServerDetailsModalVshardRouterTab.js │ │ └── index.js │ ├── ServerDropdown.js │ ├── ServerLabels.js │ ├── ServerSortableList.js │ ├── UnconfiguredServerList.js │ ├── UserAddModal │ │ ├── index.js │ │ └── state.js │ ├── UserEditModal │ │ ├── index.js │ │ └── state.js │ ├── UserRemoveModal │ │ └── index.js │ ├── UsersTable.js │ └── ZoneAddModal.js ├── constants.ts ├── generated │ ├── graphql-typing-flow.js │ ├── graphql-typing-ts.ts │ └── graphql-typing.js ├── helpers │ └── SVGModule.js ├── index.js ├── menu.js ├── misc │ ├── analytics.js │ ├── animationFlow.js │ ├── decomposeTarantoolUri.js │ ├── decomposeTarantoolUri.test.js │ ├── effectorForms.js │ ├── eventHandler.js │ ├── files.utils.js │ ├── files.utils.test.js │ ├── graphqlErrorNotification.js │ ├── initMonacoEditor.js │ ├── isNetworkError.js │ ├── lazySection.js │ ├── memoryStatistics.test.js │ ├── memoryStatistics.ts │ ├── monacoModelStorage.js │ ├── replicasetFormFunctions.js │ ├── server.js │ ├── url.js │ └── yamlValidation.js ├── models │ ├── app │ │ ├── domain.ts │ │ ├── index.ts │ │ ├── init.ts │ │ ├── messages.ts │ │ ├── types.ts │ │ ├── utils │ │ │ ├── common.test.ts │ │ │ ├── common.ts │ │ │ ├── effector.test.ts │ │ │ ├── effector.ts │ │ │ └── index.ts │ │ ├── variables.ts │ │ └── yup.ts │ ├── cluster │ │ ├── add-labels │ │ │ ├── index.ts │ │ │ └── init.ts │ │ ├── failover │ │ │ ├── failover.test.ts │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── types.ts │ │ ├── index.ts │ │ ├── init.ts │ │ ├── page │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── paths.ts │ │ ├── rebalancer-configure │ │ │ ├── index.ts │ │ │ └── init.ts │ │ ├── rebalancer-mode-configure │ │ │ ├── index.ts │ │ │ └── init.ts │ │ ├── replicaset-configure │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── types.ts │ │ ├── server-configure │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── types.ts │ │ ├── server-details │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ ├── selectors.ts │ │ │ └── types.ts │ │ ├── server-expel │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── types.ts │ │ ├── server-list │ │ │ ├── filters.ts │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ ├── selectors.ts │ │ │ └── types.ts │ │ ├── server-probe │ │ │ ├── index.ts │ │ │ └── init.ts │ │ ├── server-suggestions │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ ├── selectors.ts │ │ │ └── types.ts │ │ ├── suggestions │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ └── types.ts │ │ ├── types.ts │ │ └── zones │ │ │ ├── index.ts │ │ │ └── init.ts │ ├── index.ts │ ├── init.ts │ ├── migrations │ │ └── index.ts │ └── types.ts ├── pages │ ├── Cluster │ │ ├── Cluster.tsx │ │ ├── ClusterControllers.tsx │ │ ├── ClusterModals.tsx │ │ ├── ClusterPanels.tsx │ │ ├── components │ │ │ ├── BootstrapButton │ │ │ │ ├── BootstrapButton.tsx │ │ │ │ └── index.ts │ │ │ ├── BootstrapPanel │ │ │ │ ├── BootstrapPanel.styles.ts │ │ │ │ ├── BootstrapPanel.tsx │ │ │ │ └── index.ts │ │ │ ├── ButtonsPanel │ │ │ │ ├── ButtonsPanel.tsx │ │ │ │ └── index.ts │ │ │ ├── ClusterAddLabelModal │ │ │ │ ├── AddLabelForServerModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ClusterIssuesModal │ │ │ │ ├── ClusterIssuesModal.styles.ts │ │ │ │ ├── ClusterIssuesModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ClusterSuggestionsModal │ │ │ │ ├── ClusterSuggestionsModal.styles.ts │ │ │ │ ├── ClusterSuggestionsModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ClusterSuggestionsPanel │ │ │ │ ├── ClusterSuggestionsPanel.styles.ts │ │ │ │ ├── ClusterSuggestionsPanel.tsx │ │ │ │ ├── components │ │ │ │ │ ├── AdvertiseURISuggestionModal │ │ │ │ │ │ ├── AdvertiseURISuggestionModal.styles.ts │ │ │ │ │ │ ├── AdvertiseURISuggestionModal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── DisableServersSuggestionModal │ │ │ │ │ │ ├── DisableServersSuggestionModal.styles.ts │ │ │ │ │ │ ├── DisableServersSuggestionModal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ForceApplySuggestionModal │ │ │ │ │ │ ├── ForceApplySuggestionModal.styles.ts │ │ │ │ │ │ ├── ForceApplySuggestionModal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── RestartReplicationsSuggestionModal │ │ │ │ │ │ ├── RestartReplicationsSuggestionModal.styles.ts │ │ │ │ │ │ ├── RestartReplicationsSuggestionModal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── CountHeader │ │ │ │ ├── CountHeader.styles.tsx │ │ │ │ ├── CountHeader.tsx │ │ │ │ └── index.ts │ │ │ ├── CountHeaderDelimiter │ │ │ │ ├── CountHeaderDelimiter.styles.tsx │ │ │ │ ├── CountHeaderDelimiter.tsx │ │ │ │ └── index.ts │ │ │ ├── CountHeaderWrapper │ │ │ │ ├── CountHeaderWrapper.styles.tsx │ │ │ │ ├── CountHeaderWrapper.tsx │ │ │ │ └── index.ts │ │ │ ├── ExpelServerModal │ │ │ │ ├── ExpelServerModal.tsx │ │ │ │ └── index.ts │ │ │ ├── FailoverButton │ │ │ │ ├── FailoverButton.tsx │ │ │ │ └── index.ts │ │ │ ├── FailoverModal │ │ │ │ ├── FailoverModal.tsx │ │ │ │ ├── components │ │ │ │ │ └── FailoverModalForm │ │ │ │ │ │ ├── FailoverModalForm.form.tsx │ │ │ │ │ │ ├── FailoverModalForm.styles.ts │ │ │ │ │ │ ├── FailoverModalForm.tsx │ │ │ │ │ │ ├── FailoverModalForm.types.tsx │ │ │ │ │ │ ├── FailoverModalFormStateProviderStatusAction.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── IssuesButton │ │ │ │ ├── IssuesButton.tsx │ │ │ │ ├── components │ │ │ │ │ └── IconOkContrast │ │ │ │ │ │ ├── IconOkContrast.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── JoinReplicasetForm │ │ │ │ ├── JoinReplicasetForm.form.ts │ │ │ │ ├── JoinReplicasetForm.styles.ts │ │ │ │ ├── JoinReplicasetForm.tsx │ │ │ │ └── index.ts │ │ │ ├── Panel │ │ │ │ ├── Panel.tsx │ │ │ │ └── index.ts │ │ │ ├── ProbeServerButton │ │ │ │ ├── ProbeServerButton.tsx │ │ │ │ └── index.ts │ │ │ ├── ProbeServerModal │ │ │ │ ├── ProbeServerModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ProbeServerModalForm │ │ │ │ ├── ProbeServerModalForm.form.tsx │ │ │ │ ├── ProbeServerModalForm.styles.ts │ │ │ │ ├── ProbeServerModalForm.tsx │ │ │ │ └── index.ts │ │ │ ├── RebalancerModal │ │ │ │ ├── RebalancerModal.tsx │ │ │ │ └── index.ts │ │ │ ├── RebalancerModeButton │ │ │ │ ├── RebalancerModeButton.tsx │ │ │ │ └── index.ts │ │ │ ├── RebalancerModeModal │ │ │ │ ├── RebalancerModeModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ReplicasetAddOrEditForm │ │ │ │ ├── ReplicasetAddOrEditForm.connector.tsx │ │ │ │ ├── ReplicasetAddOrEditForm.form.tsx │ │ │ │ ├── ReplicasetAddOrEditForm.styles.ts │ │ │ │ ├── ReplicasetAddOrEditForm.tsx │ │ │ │ ├── components │ │ │ │ │ └── ServerSortableList │ │ │ │ │ │ ├── ServerSortableList.styles.ts │ │ │ │ │ │ ├── ServerSortableList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── ReplicasetConfigureModal │ │ │ │ ├── ReplicasetConfigureModal.styles.ts │ │ │ │ ├── ReplicasetConfigureModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ReplicasetConfigureModalController │ │ │ │ ├── ReplicasetConfigureModalController.tsx │ │ │ │ └── index.ts │ │ │ ├── ReplicasetFilterInput │ │ │ │ ├── ReplicasetFilterInput.styles.ts │ │ │ │ ├── ReplicasetFilterInput.tsx │ │ │ │ └── index.ts │ │ │ ├── ReplicasetListPageSection │ │ │ │ ├── ReplicasetListPageSection.styles.ts │ │ │ │ ├── ReplicasetListPageSection.tsx │ │ │ │ ├── components │ │ │ │ │ ├── IconRebalancer │ │ │ │ │ │ ├── IconRebalancer.styles.ts │ │ │ │ │ │ ├── IconRebalancer.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── MemoryIcon │ │ │ │ │ │ ├── MemoryIcon.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── NonElectableFlag │ │ │ │ │ │ ├── NonElectableFlag.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetList │ │ │ │ │ │ ├── ReplicasetList.styles.ts │ │ │ │ │ │ ├── ReplicasetList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetListBuckets │ │ │ │ │ │ ├── ReplicasetListBuckets.styles.ts │ │ │ │ │ │ ├── ReplicasetListBuckets.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetListHeader │ │ │ │ │ │ ├── ReplicasetListHeader.styles.tsx │ │ │ │ │ │ ├── ReplicasetListHeader.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetListMemStat │ │ │ │ │ │ ├── ReplicasetListMemStat.styles.ts │ │ │ │ │ │ ├── ReplicasetListMemStat.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetListStatus │ │ │ │ │ │ ├── ReplicasetListStatus.styles.ts │ │ │ │ │ │ ├── ReplicasetListStatus.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetListTag │ │ │ │ │ │ ├── ReplicasetListTag.styles.ts │ │ │ │ │ │ ├── ReplicasetListTag.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ReplicasetServerList │ │ │ │ │ │ ├── ReplicasetServerList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── ReplicasetServerListItem │ │ │ │ │ │ ├── ReplicasetServerListItem.styles.ts │ │ │ │ │ │ ├── ReplicasetServerListItem.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── ReplicasetRoles │ │ │ │ ├── ReplicasetRoles.styles.ts │ │ │ │ ├── ReplicasetRoles.tsx │ │ │ │ └── index.ts │ │ │ ├── SelectedReplicaset │ │ │ │ ├── SelectedReplicaset.styles.ts │ │ │ │ ├── SelectedReplicaset.tsx │ │ │ │ └── index.ts │ │ │ ├── SelectedServersList │ │ │ │ ├── SelectedServersList.styles.ts │ │ │ │ ├── SelectedServersList.tsx │ │ │ │ └── index.ts │ │ │ ├── ServerConfigureModal │ │ │ │ ├── ServerConfigureModal.styles.ts │ │ │ │ ├── ServerConfigureModal.tsx │ │ │ │ └── index.ts │ │ │ ├── ServerConfigureModalController │ │ │ │ ├── ServerConfigureModalController.tsx │ │ │ │ └── index.ts │ │ │ ├── ServerDetailsModal │ │ │ │ ├── ServerDetailsModal.styles.tsx │ │ │ │ ├── ServerDetailsModal.tsx │ │ │ │ ├── components │ │ │ │ │ ├── HealthStatus │ │ │ │ │ │ ├── HealthStatus.styles.ts │ │ │ │ │ │ ├── HealthStatus.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── IssuesTab │ │ │ │ │ │ ├── IssuesTab.styles.ts │ │ │ │ │ │ ├── IssuesTab.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ModalTitle │ │ │ │ │ │ ├── ModalTitle.styles.ts │ │ │ │ │ │ ├── ModalTitle.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── StatTab │ │ │ │ │ │ ├── StatTab.styles.ts │ │ │ │ │ │ ├── StatTab.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── renderers │ │ │ │ │ │ │ ├── BooleanRender.tsx │ │ │ │ │ │ │ ├── JsonRender.tsx │ │ │ │ │ │ │ └── StringRender.tsx │ │ │ │ │ └── VshardRouterTab │ │ │ │ │ │ ├── VshardRouterTab.styles.ts │ │ │ │ │ │ ├── VshardRouterTab.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── ServerDetailsModalController │ │ │ │ ├── ServerDetailsModalController.tsx │ │ │ │ └── index.ts │ │ │ ├── ServerDropdown │ │ │ │ ├── ServerDropdown.styles.ts │ │ │ │ ├── ServerDropdown.tsx │ │ │ │ └── index.ts │ │ │ ├── SuggestionsButton │ │ │ │ ├── SuggestionsButton.tsx │ │ │ │ └── index.ts │ │ │ ├── UnconfiguredServerListPageSection │ │ │ │ ├── UnconfiguredInstancesListPageSection.tsx │ │ │ │ ├── components │ │ │ │ │ ├── UnconfiguredInstancesList │ │ │ │ │ │ ├── UnconfiguredInstancesList.styles.ts │ │ │ │ │ │ ├── UnconfiguredInstancesList.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── UnconfiguredInstancesListHeader │ │ │ │ │ │ ├── UnconfiguredInstancesListHeader.styles.tsx │ │ │ │ │ │ ├── UnconfiguredInstancesListHeader.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── ZoneAddModal │ │ │ │ ├── ZoneAddModal.tsx │ │ │ │ └── index.ts │ │ └── index.tsx │ ├── Code │ │ ├── index.js │ │ └── no-file.png │ ├── ConfigManagement │ │ └── index.js │ ├── Dashboard │ │ ├── Dashboard.js │ │ └── index.js │ ├── Migrations │ │ ├── MigrationsPage.tsx │ │ └── components │ │ │ ├── Migrations.tsx │ │ │ ├── MigrationsMoveButton.tsx │ │ │ ├── MigrationsRefresh.tsx │ │ │ ├── MigrationsState.tsx │ │ │ └── MigrationsUpButton.tsx │ └── Users │ │ └── index.js └── store │ ├── actionTypes.js │ ├── actions │ ├── app.actions.js │ ├── auth.actions.js │ ├── clusterInstancePage.actions.js │ ├── clusterPage.actions.js │ ├── editor.actions.js │ └── files.actions.js │ ├── commonRequest.js │ ├── commonTypes.ts │ ├── configureStore.js │ ├── effector │ ├── cluster.js │ ├── cluster │ │ ├── events.ts │ │ ├── index.ts │ │ └── types.ts │ ├── clusterSuggestions.js │ ├── clusterZones │ │ ├── index.js │ │ └── zoneAddModal.js │ ├── configUpload.js │ └── users │ │ ├── index.js │ │ ├── init.js │ │ └── state.js │ ├── instance.js │ ├── reducers │ ├── app.reducer.js │ ├── auth.reducer.js │ ├── clusterInstancePage.reducer.js │ ├── clusterPage.reducer.js │ ├── codeEditor.reducer.js │ ├── codeEditor.reducer.test.js │ ├── editor.reducer.js │ ├── files.reducer.js │ ├── files.reducer.test.js │ └── ui.reducer.js │ ├── request │ ├── app.requests.js │ ├── auth.requests.js │ ├── clusterInstancePage.requests.js │ ├── clusterPage.requests.js │ ├── files.requests.js │ ├── queries.graphql.js │ └── users.requests.js │ ├── rootReducer.js │ ├── rootSaga.js │ ├── saga │ ├── app.saga.js │ ├── auth.saga.js │ ├── clusterInstancePage.saga.js │ ├── clusterPage.saga.js │ ├── editor.saga.js │ └── files.saga.js │ └── selectors │ ├── clusterPage.js │ ├── clusterPage.test.js │ ├── filesSelectors.js │ └── filesSelectors.test.js ├── tsconfig.json └── webpack.config.js /.cartridge.yml: -------------------------------------------------------------------------------- 1 | --- 2 | cfg: instances.yml 3 | script: test/entrypoint/srv_basic.lua 4 | stateboard: true 5 | 6 | # for CLI < 2.0 7 | run_dir: 'dev' 8 | 9 | # for CLI >= 2.0 10 | run-dir: './tmp/run' 11 | data-dir: './tmp/data' 12 | ... 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | webui/node_modules 3 | webui/build 4 | webui/flow-typed 5 | webui/public 6 | webui/scripts 7 | webui/src/generated 8 | webui/config 9 | webui/scripts 10 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.snap binary 3 | *.xlog binary 4 | *.png binary 5 | *.svg binary 6 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | What has been done? Why? What problem is being solved? 2 | 3 | I didn't forget about 4 | 5 | - [ ] Tests 6 | - [ ] Changelog 7 | - [ ] Documentation 8 | 9 | Close #??? 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .~* 2 | *~ 3 | .tarantool.cookie 4 | .rocks 5 | .cache 6 | .doctrees 7 | __pycache__ 8 | /dev 9 | /tmp 10 | doc 11 | release 12 | release-doc 13 | .idea 14 | Dockerfile.test 15 | Makefile.test 16 | CMakeFiles 17 | CMakeCache.txt 18 | cmake_install.cmake 19 | CTestTestfile.cmake 20 | build.luarocks 21 | build.rst 22 | coverage_result.txt 23 | .DS_Store 24 | .vscode 25 | luacov.*.out* 26 | /node_modules 27 | /package-lock.json 28 | *.mo 29 | .history 30 | rst/locale/en/ 31 | sandbox.lua 32 | *.xlog 33 | *.snap 34 | package.json 35 | *.log 36 | -------------------------------------------------------------------------------- /.graphqlconfig.yaml: -------------------------------------------------------------------------------- 1 | projects: 2 | cluster: 3 | schemaPath: schema.graphql 4 | extensions: 5 | endpoints: 6 | default: 'http://127.0.0.1:8081/admin/api' 7 | -------------------------------------------------------------------------------- /.luacheckrc: -------------------------------------------------------------------------------- 1 | redefined = false 2 | include_files = { 3 | '*.lua', 4 | 'test/**/*.lua', 5 | 'cartridge/**/*.lua', 6 | '*.rockspec', 7 | '.luacheckrc', 8 | } 9 | exclude_files = { 10 | '.rocks', 11 | } 12 | new_read_globals = { 13 | box = { fields = { 14 | session = { fields = { 15 | storage = {read_only = false, other_fields = true} 16 | }} 17 | }} 18 | } 19 | ignore = {"614"} 20 | -------------------------------------------------------------------------------- /.luacov: -------------------------------------------------------------------------------- 1 | exclude = { 2 | '/test/', 3 | '/tmp/', 4 | '/dev/', 5 | '/webui/', 6 | '/build.luarocks/', 7 | '/.rocks/', 8 | } 9 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /webui/node_modules 3 | /webui/src/generated/* 4 | !/webui/src/generated/graphql-typing-ts.ts 5 | -------------------------------------------------------------------------------- /cartridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/cartridge.png -------------------------------------------------------------------------------- /cartridge/VERSION.lua: -------------------------------------------------------------------------------- 1 | -- Сontains the module version. 2 | -- Requires manual update in case of release commit. 3 | 4 | return '2.15.3' 5 | -------------------------------------------------------------------------------- /cartridge/graphql/execute.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.execute` is deprecated." .. 4 | " Use `require('graphql.execute')` instead." 5 | ) 6 | 7 | return require('graphql.execute') 8 | -------------------------------------------------------------------------------- /cartridge/graphql/funcall.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.funcall` is deprecated." .. 4 | " Use `require('cartridge.funcall')` instead." 5 | ) 6 | 7 | return require('cartridge.funcall') 8 | -------------------------------------------------------------------------------- /cartridge/graphql/parse.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.parse` is deprecated." .. 4 | " Use `require('graphql.parse')` instead." 5 | ) 6 | 7 | return require('graphql.parse') 8 | -------------------------------------------------------------------------------- /cartridge/graphql/schema.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.schema` is deprecated." .. 4 | " Use `require('graphql.schema')` instead." 5 | ) 6 | 7 | return require('graphql.schema') 8 | -------------------------------------------------------------------------------- /cartridge/graphql/types.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.types` is deprecated." .. 4 | " Use `require('graphql.types')` instead." 5 | ) 6 | 7 | return require('graphql.types') 8 | -------------------------------------------------------------------------------- /cartridge/graphql/validate.lua: -------------------------------------------------------------------------------- 1 | local errors = require('errors') 2 | errors.deprecate( 3 | "Module `cartridge.graphql.validate` is deprecated." .. 4 | " Use `require('graphql.validate')` instead." 5 | ) 6 | 7 | return require('graphql.validate') 8 | -------------------------------------------------------------------------------- /cmake/FindLdoc.cmake: -------------------------------------------------------------------------------- 1 | find_program(LDOC ldoc 2 | HINTS .rocks/ 3 | PATH_SUFFIXES bin 4 | DOC "Documentation generator tool for Lua source code" 5 | ) 6 | 7 | include(FindPackageHandleStandardArgs) 8 | find_package_handle_standard_args(Ldoc 9 | REQUIRED_VARS LDOC 10 | ) 11 | 12 | mark_as_advanced(LDOC) 13 | -------------------------------------------------------------------------------- /cmake/FindSphinx.cmake: -------------------------------------------------------------------------------- 1 | find_program(SPHINX sphinx-build 2 | HINTS ${SPHINX_DIR} 3 | PATH_SUFFIXES bin 4 | DOC "Create intelligent and beautiful documentation" 5 | ) 6 | 7 | include(FindPackageHandleStandardArgs) 8 | find_package_handle_standard_args(Sphinx 9 | REQUIRED_VARS SPHINX 10 | ) 11 | 12 | mark_as_advanced(SPHINX_EXECUTABLE) 13 | -------------------------------------------------------------------------------- /crowdin.yaml: -------------------------------------------------------------------------------- 1 | # https://support.crowdin.com/configuration-file/ 2 | # https://support.crowdin.com/cli-tool-v3/#configuration 3 | 4 | "project_id" : "447872" 5 | "base_path" : "./rst/locale" 6 | "base_url": "https://crowdin.com" 7 | "api_token_env": "CROWDIN_PERSONAL_TOKEN" 8 | 9 | 10 | "preserve_hierarchy": true 11 | 12 | files: [ 13 | { 14 | "source" : "/en/**/*.pot", 15 | "translation" : "/%locale_with_underscore%/LC_MESSAGES/**/%file_name%.po", 16 | "update_option" : "update_as_unapproved", 17 | 18 | "languages_mapping" : { 19 | "locale_with_underscore" : { 20 | "ru" : "ru", 21 | } 22 | }, 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /fetch-schema.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | TARANTOOL_WORKDIR=dev/gql-schema test/entrypoint/srv_basic.lua & 4 | PID=$! 5 | 6 | TMP=$(uuidgen).graphql 7 | npx graphql get-schema -o $TMP 8 | 9 | OUTPUT="doc/schema.graphql" 10 | diff \ 11 | --ignore-all-space \ 12 | --ignore-blank-lines \ 13 | --ignore-matching-lines "^# timestamp:" \ 14 | $OUTPUT $TMP 15 | DIFF=$? 16 | 17 | if [ "$DIFF" -eq 0 ] 18 | then 19 | echo "GraphQL schema is up to date!" 20 | rm -f $TMP 21 | else 22 | echo "GraphQL schema was updated!" 23 | mv -f $TMP $OUTPUT 24 | fi 25 | 26 | kill $PID 27 | exit $DIFF 28 | -------------------------------------------------------------------------------- /frontend-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e -x 4 | 5 | npm run graphqlgen --prefix=webui 6 | npm run flow --prefix=webui 7 | npm run test_once --prefix=webui 8 | npm run lint --prefix=webui 9 | npm run lint:test --prefix=webui 10 | -------------------------------------------------------------------------------- /full-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/full-cluster.png -------------------------------------------------------------------------------- /instances.yml: -------------------------------------------------------------------------------- 1 | cartridge: 2 | cluster_cookie: "" 3 | replication_connect_quorum: 1 4 | 5 | cartridge.srv-1: 6 | workdir: dev/3301 7 | advertise_uri: localhost:3301 8 | http_port: 8081 9 | 10 | cartridge.srv-2: 11 | workdir: dev/3302 12 | advertise_uri: localhost:3302 13 | http_port: 8082 14 | 15 | cartridge.srv-3: 16 | workdir: dev/3303 17 | advertise_uri: localhost:3303 18 | http_port: 8083 19 | 20 | cartridge.srv-4: 21 | workdir: dev/3304 22 | advertise_uri: localhost:3304 23 | http_port: 8084 24 | 25 | cartridge.srv-5: 26 | workdir: ./dev/3305 27 | advertise_uri: localhost:3305 28 | http_port: 8085 29 | 30 | cartridge-stateboard: 31 | workdir: ./dev/stateboard 32 | password: '' 33 | listen: 4401 34 | -------------------------------------------------------------------------------- /push_test_results.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Sending list of test results to ${MONITOR_HOST}..." 4 | curl -s --data-binary "@luatest.log" --cookie "token=${MONITOR_TOKEN}" \ 5 | "${MONITOR_HOST}/api_result/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}/${CI_COMMIT_SHA}/${CI_JOB_ID}/luatest" 6 | 7 | if [ "${CI_COMMIT_REF_NAME}" = "master" ]; then 8 | echo "Sending list of updated tests..." 9 | LAST_COMMIT=$(curl --cookie "token=${MONITOR_TOKEN}" "${MONITOR_HOST}/api_last/${CI_PROJECT_NAME}") 10 | DIFF=$(git diff --name-only "${LAST_COMMIT}") 11 | curl -s -d "${DIFF}" --cookie "token=${MONITOR_TOKEN}" \ 12 | "${MONITOR_HOST}/api_diff/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}" 13 | fi 14 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | testpaths = test/integration 3 | addopts = -v 4 | -------------------------------------------------------------------------------- /replicasets.yml: -------------------------------------------------------------------------------- 1 | R: 2 | instances: 3 | - srv-1 4 | roles: 5 | - failover-coordinator 6 | - vshard-router 7 | - myrole-dependency 8 | - myrole 9 | S-A: 10 | instances: 11 | - srv-2 12 | - srv-3 13 | roles: 14 | - vshard-storage 15 | weight: 1 16 | S-B: 17 | instances: 18 | - srv-4 19 | - srv-5 20 | roles: 21 | - vshard-storage 22 | weight: 1 23 | -------------------------------------------------------------------------------- /rst/conf.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | 4 | sys.path.insert(0, os.path.abspath('.')) 5 | 6 | master_doc = 'index' 7 | 8 | source_suffix = '.rst' 9 | 10 | project = u'Cartridge' 11 | 12 | # |release| The full version, including alpha/beta/rc tags. 13 | release = "2.1.2" 14 | # |version| The short X.Y version. 15 | version = '2.1' 16 | 17 | exclude_patterns = [ 18 | 'conf.py', 19 | 'images', 20 | 'requirements.txt', 21 | 'locale', 22 | 'cartridge_api/modules/cartridge.test-helpers.rst', 23 | 'topics/*' 24 | ] 25 | 26 | extensions = [ 27 | 'TarantoolSessionLexer', 28 | ] 29 | 30 | language = 'en' 31 | locale_dirs = ['./locale'] 32 | gettext_additional_targets = ['literal-block'] 33 | gettext_compact = False 34 | gettext_location = True 35 | 36 | rst_epilog = """ 37 | 38 | .. |nbsp| unicode:: 0xA0 39 | :trim: 40 | 41 | """ 42 | -------------------------------------------------------------------------------- /rst/images/applied-migrations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/applied-migrations.png -------------------------------------------------------------------------------- /rst/images/auth_creds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/auth_creds.png -------------------------------------------------------------------------------- /rst/images/bootstrap-vshard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/bootstrap-vshard.png -------------------------------------------------------------------------------- /rst/images/cartridge-issues-alien-uuid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-issues-alien-uuid.png -------------------------------------------------------------------------------- /rst/images/cartridge-issues-config-mismatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-issues-config-mismatch.png -------------------------------------------------------------------------------- /rst/images/cartridge-issues-force-apply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-issues-force-apply.png -------------------------------------------------------------------------------- /rst/images/cartridge-issues-high-lag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-issues-high-lag.png -------------------------------------------------------------------------------- /rst/images/cartridge-issues-replication-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-issues-replication-details.png -------------------------------------------------------------------------------- /rst/images/cartridge-server-details-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-server-details-button.png -------------------------------------------------------------------------------- /rst/images/cartridge-server-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cartridge-server-details.png -------------------------------------------------------------------------------- /rst/images/change-weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/change-weight.png -------------------------------------------------------------------------------- /rst/images/cluster-issues-replication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/cluster-issues-replication.png -------------------------------------------------------------------------------- /rst/images/compression-suggestion-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/compression-suggestion-1.png -------------------------------------------------------------------------------- /rst/images/compression-suggestion-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/compression-suggestion-2.png -------------------------------------------------------------------------------- /rst/images/compression-suggestion-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/compression-suggestion-3.png -------------------------------------------------------------------------------- /rst/images/create-router.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/create-router.png -------------------------------------------------------------------------------- /rst/images/create-storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/create-storage.png -------------------------------------------------------------------------------- /rst/images/dead-replicaset-issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/dead-replicaset-issue.png -------------------------------------------------------------------------------- /rst/images/dead-replicaset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/dead-replicaset.png -------------------------------------------------------------------------------- /rst/images/disable-instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/disable-instance.png -------------------------------------------------------------------------------- /rst/images/disable-instances-suggestion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/disable-instances-suggestion.png -------------------------------------------------------------------------------- /rst/images/disabled-instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/disabled-instance.png -------------------------------------------------------------------------------- /rst/images/edit-replica-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/edit-replica-set.png -------------------------------------------------------------------------------- /rst/images/expelling-instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/expelling-instance.png -------------------------------------------------------------------------------- /rst/images/failover-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-button.png -------------------------------------------------------------------------------- /rst/images/failover-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-disabled.png -------------------------------------------------------------------------------- /rst/images/failover-eventual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-eventual.png -------------------------------------------------------------------------------- /rst/images/failover-priority.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-priority.png -------------------------------------------------------------------------------- /rst/images/failover-promote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-promote.png -------------------------------------------------------------------------------- /rst/images/failover-raft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-raft.png -------------------------------------------------------------------------------- /rst/images/failover-stateful.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/failover-stateful.png -------------------------------------------------------------------------------- /rst/images/final-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/final-cluster.png -------------------------------------------------------------------------------- /rst/images/join-storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/join-storage.png -------------------------------------------------------------------------------- /rst/images/migrations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/migrations.png -------------------------------------------------------------------------------- /rst/images/non_electable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/non_electable.png -------------------------------------------------------------------------------- /rst/images/probe-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/probe-server.png -------------------------------------------------------------------------------- /rst/images/rebalancer-flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/rebalancer-flags.png -------------------------------------------------------------------------------- /rst/images/rebalancer-instance-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/rebalancer-instance-button.png -------------------------------------------------------------------------------- /rst/images/rebalancer-instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/rebalancer-instance.png -------------------------------------------------------------------------------- /rst/images/rebalancer-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/rebalancer-mode.png -------------------------------------------------------------------------------- /rst/images/rebalancer-replicaset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/rebalancer-replicaset.png -------------------------------------------------------------------------------- /rst/images/router-replica-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/router-replica-set.png -------------------------------------------------------------------------------- /rst/images/set-zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/set-zone.png -------------------------------------------------------------------------------- /rst/images/set_non_electable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/set_non_electable.png -------------------------------------------------------------------------------- /rst/images/state-provider-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/state-provider-status.png -------------------------------------------------------------------------------- /rst/images/stuck-connecting-fullmesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/stuck-connecting-fullmesh.png -------------------------------------------------------------------------------- /rst/images/switch-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/switch-master.png -------------------------------------------------------------------------------- /rst/images/unconfigured-router.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/unconfigured-router.png -------------------------------------------------------------------------------- /rst/images/users-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/users-tab.png -------------------------------------------------------------------------------- /rst/images/zero-weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/zero-weight.png -------------------------------------------------------------------------------- /rst/images/zero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/rst/images/zero.png -------------------------------------------------------------------------------- /rst/index.rst: -------------------------------------------------------------------------------- 1 | :noindex: 2 | :fullwidth: 3 | 4 | .. _tarantool-cartridge: 5 | 6 | 7 | ******************************************************************************** 8 | Tarantool Cartridge 9 | ******************************************************************************** 10 | 11 | Cluster management in Tarantool is powered by the Tarantool Cartridge 12 | framework. 13 | 14 | Here we explain how you can benefit with Tarantool Cartridge, 15 | a framework for developing, deploying, and managing applications 16 | based on Tarantool. 17 | 18 | This documentation contains the following sections: 19 | 20 | .. toctree:: 21 | :maxdepth: 2 22 | :numbered: 0 23 | 24 | Overview 25 | cartridge_dev 26 | cartridge_admin 27 | troubleshooting 28 | Cartridge API 29 | Cartridge CLI 30 | Changelog 31 | -------------------------------------------------------------------------------- /rst/locale/ru/LC_MESSAGES/index.po: -------------------------------------------------------------------------------- 1 | 2 | msgid "Tarantool Cartridge" 3 | msgstr "Tarantool Cartridge" 4 | 5 | msgid "" 6 | "**Cluster** management in Tarantool is powered by the Tarantool Cartridge " 7 | "framework." 8 | msgstr "" 9 | "Управление **кластерами** в Tarantool осуществляется с помощью фреймворка " 10 | "Tarantool Cartridge." 11 | 12 | msgid "" 13 | "Here we explain how you can benefit with Tarantool Cartridge, a framework " 14 | "for developing, deploying, and managing applications based on Tarantool." 15 | msgstr "" 16 | "В этом документе мы объясним, как можно использовать Tarantool Cartridge — " 17 | "фреймворк для разработки, развертывания и управления приложениями на основе " 18 | "Tarantool." 19 | 20 | msgid "This documentation contains the following sections:" 21 | msgstr "Этот документ состоит из следующих разделов:" 22 | -------------------------------------------------------------------------------- /rst/requirements.txt: -------------------------------------------------------------------------------- 1 | Jinja2>=3.1 2 | Sphinx==5.3.0 3 | sphinx-intl>=2.0.1 4 | sphinxcontrib-applehelp>=1.0.8 5 | sphinxcontrib.devhelp>=1.0.6 6 | sphinxcontrib.htmlhelp>=2.0.5 7 | sphinxcontrib-serializinghtml>=1.1.10 8 | sphinxcontrib-qthelp>=1.0.7 9 | alabaster>=0.7.14 10 | polib>=1.1.0 11 | docutils>=0.17 12 | pyyaml>=5.4.1 13 | -------------------------------------------------------------------------------- /rst/uml/ConfigFound.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | [*] --> ConfigFound 5 | ConfigFound --> ConfigLoaded 6 | ConfigFound --> InitError 7 | 8 | @enduml -------------------------------------------------------------------------------- /rst/uml/ConfigLoaded.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | state "BootstrappingBox or RecoveringSnapshot" as BootstrappingBox 5 | 6 | ConfigFound --> ConfigLoaded 7 | ConfigLoaded --> BootstrappingBox 8 | 9 | @enduml -------------------------------------------------------------------------------- /rst/uml/ConfiguringRoles.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | 5 | BoxConfigured --> ConfiguringRoles 6 | ConfiguringRoles --> RolesConfigured 7 | ConfiguringRoles --> OperationError 8 | RolesConfigured --> ConfiguringRoles 9 | 10 | @enduml -------------------------------------------------------------------------------- /rst/uml/ConnectingFullmesh.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | state "BootstrappingBox or RecoveringSnapshot" as BootstrappingBox 5 | BootstrappingBox --> ConnectingFullmesh 6 | ConnectingFullmesh --> BoxConfigured 7 | ConnectingFullmesh --> ConnectingFullmesh 8 | ConnectingFullmesh --> BootError 9 | 10 | @enduml 11 | -------------------------------------------------------------------------------- /rst/uml/InitialState.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | [*] --> Unconfigured 5 | [*] --> ConfigFound 6 | 7 | @enduml 8 | -------------------------------------------------------------------------------- /rst/uml/Recovery.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | 4 | hide empty description 5 | state "BootstrappingBox or RecoveringSnapshot" as BootstrappingBox 6 | 7 | Unconfigured --> BootstrappingBox 8 | ConfigLoaded --> BootstrappingBox 9 | BootstrappingBox --> ConnectingFullmesh 10 | BootstrappingBox --> BootError 11 | 12 | @enduml -------------------------------------------------------------------------------- /rst/uml/Unconfigured.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | state "BootstrappingBox or RecoveringSnapshot" as BootstrappingBox 5 | [*] --> Unconfigured 6 | Unconfigured --> BootstrappingBox 7 | 8 | @enduml -------------------------------------------------------------------------------- /rst/uml/state-machine.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | hide empty description 4 | title Cartridge instance state model 5 | 6 | [*] --> Unconfigured 7 | [*] --> ConfigFound 8 | 9 | Unconfigured --> BootstrappingBox 10 | 11 | ConfigFound --> ConfigLoaded 12 | ConfigFound --> InitError 13 | 14 | state "BootstrappingBox or RecoveringSnapshot" as BootstrappingBox 15 | ConfigLoaded --> BootstrappingBox 16 | 17 | BootstrappingBox --> ConnectingFullmesh 18 | BootstrappingBox --> BootError 19 | 20 | ConnectingFullmesh --> BoxConfigured 21 | ConnectingFullmesh -left-> ConnectingFullmesh 22 | ConnectingFullmesh -> BootError 23 | 24 | BoxConfigured --> ConfiguringRoles 25 | 26 | ConfiguringRoles --> RolesConfigured 27 | ConfiguringRoles --> OperationError 28 | RolesConfigured --> ConfiguringRoles 29 | 30 | @enduml -------------------------------------------------------------------------------- /stateboard.init.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tarantool 2 | 3 | require('cartridge.stateboard').cfg() 4 | -------------------------------------------------------------------------------- /test/entrypoint/srv_empty.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tarantool 2 | 3 | require('strict').on() 4 | 5 | local remote_control = require('cartridge.remote-control') 6 | local ok, err = remote_control.bind( 7 | '0.0.0.0', 8 | os.getenv('TARANTOOL_LISTEN') or '13301' 9 | ) 10 | assert(ok, err) 11 | 12 | remote_control.accept({ 13 | username = 'admin', 14 | password = '', 15 | }) 16 | -------------------------------------------------------------------------------- /test/entrypoint/srv_loghack.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tarantool 2 | 3 | local require_original = require 4 | rawset(_G, 'require', function(name) 5 | local module = require_original(name) 6 | if name == 'log' then 7 | module.warn = function(...) 8 | if rawget(_G, '__log_warn') == nil then 9 | rawset(_G, '__log_warn', {}) 10 | end 11 | table.insert(_G.__log_warn, string.format(...)) 12 | end 13 | module.error = function(...) 14 | if rawget(_G, '__log_error') == nil then 15 | rawset(_G, '__log_error', {}) 16 | end 17 | table.insert(_G.__log_error, string.format(...)) 18 | end 19 | end 20 | return module 21 | end) 22 | 23 | local helpers = require('test.helper') 24 | dofile(helpers.entrypoint('srv_basic')) 25 | -------------------------------------------------------------------------------- /test/entrypoint/srv_stateboard.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tarantool 2 | 3 | require('strict').on() 4 | local stateboard = require('cartridge.stateboard') 5 | stateboard.cfg() 6 | -------------------------------------------------------------------------------- /test/entrypoint/srv_woauth.lua: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tarantool 2 | 3 | require('strict').on() 4 | _G.is_initialized = function() return false end 5 | 6 | local log = require('log') 7 | local errors = require('errors') 8 | local cartridge = require('cartridge') 9 | errors.set_deprecation_handler(function(err) 10 | log.error('Deprecated function was called') 11 | log.error('%s', err) 12 | os.exit(1) 13 | end) 14 | 15 | package.preload['no-auth'] = function() 16 | return {} 17 | end 18 | 19 | local ok, err = cartridge.cfg({ 20 | roles = {}, 21 | auth_backend_name = 'no-auth', 22 | }, 23 | { 24 | log = '', 25 | }) 26 | 27 | if not ok then 28 | log.error('%s', err) 29 | os.exit(1) 30 | end 31 | 32 | _G.is_initialized = cartridge.is_healthy 33 | -------------------------------------------------------------------------------- /test/integration/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest>=7.0.0 2 | pyyaml>=6.0 3 | requests>=2.25.0 4 | tarantool==0.12.1 5 | -------------------------------------------------------------------------------- /test/integration/ssl_cert/ca.srl: -------------------------------------------------------------------------------- 1 | 15C6967D24F9A65CF580582F0BC698B2D48E4150 2 | -------------------------------------------------------------------------------- /test/integration/ssl_cert/gen-gost.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script generates a private SSL key and a self-signed certificate using 4 | # the GOST algorithm. 5 | # 6 | # For the script to work, you need to install the GOST engine library: 7 | # 8 | # $ sudo apt install libengine-gost-openssl1.1 9 | 10 | NAME=gost 11 | DAYS_ARG=36500 12 | 13 | OPENSSL_CONF="$(dirname $0)/openssl.cnf" 14 | 15 | OPENSSL_CONF="${OPENSSL_CONF}" openssl genpkey -algorithm gost2001 \ 16 | -pkeyopt paramset:A -out "${NAME}.key" 17 | 18 | OPENSSL_CONF="${OPENSSL_CONF}" openssl req -new -x509 -days ${DAYS_ARG} \ 19 | -subj '/C=RU' -key "${NAME}.key" -out "${NAME}.crt" 20 | -------------------------------------------------------------------------------- /test/integration/ssl_cert/gost.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIBGTCBxwIUFKIB/Aoq3xvODQUweMGBAuZhdUIwCgYGKoUDAgIDBQAwDTELMAkG 3 | A1UEBhMCUlUwIBcNMjIwMjIyMTE1MzUzWhgPMjEyMjAxMjkxMTUzNTNaMA0xCzAJ 4 | BgNVBAYTAlJVMGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQJt2 5 | R/BMh/yxnoJqw8qm14WN8EoZMYgEi8CYLRNp6UX6PtldxGNDwF8YFt3lgPNyxNNh 6 | vzEJ/5BadiBIyiIxvL4wCgYGKoUDAgIDBQADQQBNwvBfRo7Jeki2WR8tWQVr9Y57 7 | bqhbfbp5R7arduu4rWWBuQrbrne7eCqohehF7s6dyJ6AkHnBfgOf/Jh3QVHq 8 | -----END CERTIFICATE----- 9 | -------------------------------------------------------------------------------- /test/integration/ssl_cert/gost.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEILdHHIzBe3uWh43v 3 | jdBjLTxVvgfmfVqX6qSuYlJgRyEx 4 | -----END PRIVATE KEY----- 5 | -------------------------------------------------------------------------------- /test/integration/ssl_cert/openssl.cnf: -------------------------------------------------------------------------------- 1 | openssl_conf = openssl_def 2 | 3 | [ req ] 4 | distinguished_name = req_dn 5 | 6 | [ req_dn ] 7 | 8 | [ openssl_def ] 9 | engines = engine_section 10 | 11 | [ engine_section ] 12 | gost = gost_section 13 | 14 | [ gost_section ] 15 | engine_id = gost 16 | default_algorithms = ALL 17 | -------------------------------------------------------------------------------- /test/roles/storage.lua: -------------------------------------------------------------------------------- 1 | return { 2 | init = function(opts) 3 | if opts.is_master then 4 | assert(box.info.ro == false) 5 | box.schema.space.create('test', { if_not_exists = true }) 6 | box.space.test:format{ 7 | {'bucket_id', 'unsigned'}, 8 | {'key', 'string'}, 9 | {'value', 'any'}, 10 | } 11 | box.space.test:create_index('primary', { 12 | parts = {'key'}, 13 | if_not_exists = true, 14 | }) 15 | box.space.test:create_index('bucket_id', { 16 | parts = {'bucket_id'}, 17 | if_not_exists = true, 18 | unique = false, 19 | }) 20 | end 21 | end, 22 | dependencies = { 'cartridge.roles.vshard-storage' }, 23 | } 24 | -------------------------------------------------------------------------------- /test/unit/ssl_cert/ca.srl: -------------------------------------------------------------------------------- 1 | 15C6967D24F9A65CF580582F0BC698B2D48E4150 2 | -------------------------------------------------------------------------------- /test/unit/ssl_cert/gen-gost.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script generates a private SSL key and a self-signed certificate using 4 | # the GOST algorithm. 5 | # 6 | # For the script to work, you need to install the GOST engine library: 7 | # 8 | # $ sudo apt install libengine-gost-openssl1.1 9 | 10 | NAME=gost 11 | DAYS_ARG=36500 12 | 13 | OPENSSL_CONF="$(dirname $0)/openssl.cnf" 14 | 15 | OPENSSL_CONF="${OPENSSL_CONF}" openssl genpkey -algorithm gost2001 \ 16 | -pkeyopt paramset:A -out "${NAME}.key" 17 | 18 | OPENSSL_CONF="${OPENSSL_CONF}" openssl req -new -x509 -days ${DAYS_ARG} \ 19 | -subj '/C=RU' -key "${NAME}.key" -out "${NAME}.crt" 20 | -------------------------------------------------------------------------------- /test/unit/ssl_cert/gost.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIBGTCBxwIUFKIB/Aoq3xvODQUweMGBAuZhdUIwCgYGKoUDAgIDBQAwDTELMAkG 3 | A1UEBhMCUlUwIBcNMjIwMjIyMTE1MzUzWhgPMjEyMjAxMjkxMTUzNTNaMA0xCzAJ 4 | BgNVBAYTAlJVMGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQJt2 5 | R/BMh/yxnoJqw8qm14WN8EoZMYgEi8CYLRNp6UX6PtldxGNDwF8YFt3lgPNyxNNh 6 | vzEJ/5BadiBIyiIxvL4wCgYGKoUDAgIDBQADQQBNwvBfRo7Jeki2WR8tWQVr9Y57 7 | bqhbfbp5R7arduu4rWWBuQrbrne7eCqohehF7s6dyJ6AkHnBfgOf/Jh3QVHq 8 | -----END CERTIFICATE----- 9 | -------------------------------------------------------------------------------- /test/unit/ssl_cert/gost.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEILdHHIzBe3uWh43v 3 | jdBjLTxVvgfmfVqX6qSuYlJgRyEx 4 | -----END PRIVATE KEY----- 5 | -------------------------------------------------------------------------------- /test/unit/ssl_cert/openssl.cnf: -------------------------------------------------------------------------------- 1 | openssl_conf = openssl_def 2 | 3 | [ req ] 4 | distinguished_name = req_dn 5 | 6 | [ req_dn ] 7 | 8 | [ openssl_def ] 9 | engines = engine_section 10 | 11 | [ engine_section ] 12 | gost = gost_section 13 | 14 | [ gost_section ] 15 | engine_id = gost 16 | default_algorithms = ALL 17 | -------------------------------------------------------------------------------- /test/upgrade/.gitignore: -------------------------------------------------------------------------------- 1 | config.backup 2 | *.xlog 3 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13301/00000000000000000002.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/test/upgrade/data_1.10.5/localhost-13301/00000000000000000002.snap -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13301/config/auth.yml: -------------------------------------------------------------------------------- 1 | --- 2 | cookie_max_age: 2592000 3 | enabled: false 4 | cookie_renew_age: 86400 5 | ... 6 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13301/config/vshard_groups.yml: -------------------------------------------------------------------------------- 1 | --- 2 | default: 3 | rebalancer_max_receiving: 100 4 | rebalancer_max_sending: 1 5 | bootstrapped: true 6 | collect_bucket_garbage_interval: 0.5 7 | collect_lua_garbage: false 8 | sync_timeout: 1 9 | bucket_count: 3000 10 | rebalancer_disbalance_threshold: 1 11 | ... 12 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13303/00000000000000003036.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/test/upgrade/data_1.10.5/localhost-13303/00000000000000003036.snap -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13303/config/auth.yml: -------------------------------------------------------------------------------- 1 | --- 2 | cookie_max_age: 2592000 3 | enabled: false 4 | cookie_renew_age: 86400 5 | ... 6 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13303/config/vshard_groups.yml: -------------------------------------------------------------------------------- 1 | --- 2 | default: 3 | rebalancer_max_receiving: 100 4 | rebalancer_max_sending: 1 5 | bootstrapped: true 6 | collect_bucket_garbage_interval: 0.5 7 | collect_lua_garbage: false 8 | sync_timeout: 1 9 | bucket_count: 3000 10 | rebalancer_disbalance_threshold: 1 11 | ... 12 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13305/00000000000000003036.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/test/upgrade/data_1.10.5/localhost-13305/00000000000000003036.snap -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13305/config/auth.yml: -------------------------------------------------------------------------------- 1 | --- 2 | cookie_max_age: 2592000 3 | enabled: false 4 | cookie_renew_age: 86400 5 | ... 6 | -------------------------------------------------------------------------------- /test/upgrade/data_1.10.5/localhost-13305/config/vshard_groups.yml: -------------------------------------------------------------------------------- 1 | --- 2 | default: 3 | rebalancer_max_receiving: 100 4 | rebalancer_max_sending: 1 5 | bootstrapped: true 6 | collect_bucket_garbage_interval: 0.5 7 | collect_lua_garbage: false 8 | sync_timeout: 1 9 | bucket_count: 3000 10 | rebalancer_disbalance_threshold: 1 11 | ... 12 | -------------------------------------------------------------------------------- /webui/.babelrc.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@tarantool.io/babel-config')({}); 2 | -------------------------------------------------------------------------------- /webui/.browserslistrc: -------------------------------------------------------------------------------- 1 | opera >= 65 2 | chrome >= 75 3 | edge >= 80 4 | bb >= 10 5 | android >= 80 6 | firefox >= 65 7 | safari >= 12 8 | ios_saf >= 12 9 | -------------------------------------------------------------------------------- /webui/.env: -------------------------------------------------------------------------------- 1 | REACT_APP_LOGIN_API_ENDPOINT=/login 2 | REACT_APP_LOGOUT_API_ENDPOINT=/logout 3 | REACT_APP_GRAPHQL_API_ENDPOINT=/admin/api 4 | REACT_APP_SOAP_API_ENDPOINT=/soap 5 | REACT_APP_CONFIG_ENDPOINT=/admin/config 6 | REACT_APP_DOCS_ENDPOINT=/docs 7 | REACT_APP_LSP_ENDPOINT=/admin/lsp 8 | REACT_APP_MIGRATIONS_ENDPOINT=/migrations 9 | GENERATE_SOURCEMAP=false 10 | -------------------------------------------------------------------------------- /webui/.env.development: -------------------------------------------------------------------------------- 1 | REACT_APP_API_ENTRY=http://localhost:8081 2 | WEBPACK_DEV_SERVER_PROXY=true 3 | -------------------------------------------------------------------------------- /webui/.env.production: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/.env.production -------------------------------------------------------------------------------- /webui/.eslintignore: -------------------------------------------------------------------------------- 1 | /build 2 | /flow-typed 3 | /flow-typed/npm 4 | /public 5 | /scripts 6 | /src/generated 7 | /config 8 | /scripts 9 | -------------------------------------------------------------------------------- /webui/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | '@tarantool.io/eslint-config', 4 | '@tarantool.io/eslint-config/react', 5 | '@tarantool.io/eslint-config/emotion', 6 | '@tarantool.io/eslint-config/cypress', 7 | ], 8 | settings: { 9 | 'import/resolver': { 10 | node: { 11 | extensions: ['.js', '.jsx', '.ts', '.tsx'], 12 | moduleDirectory: ['node_modules', '.'], 13 | }, 14 | }, 15 | }, 16 | overrides: [ 17 | { 18 | files: ['*.test.js', '*.spec.js'], 19 | rules: { 20 | 'sonarjs/no-duplicate-string': 'off', 21 | }, 22 | }, 23 | ], 24 | rules: { 25 | 'sonarjs/cognitive-complexity': 'off', 26 | 'no-console': 'off', 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /webui/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | *.ts 3 | *.tsx 4 | .*broken.json.* 5 | .*/node_modules/tiny-invariant/.* 6 | .*/malformed_package_json/package.json 7 | 8 | [include] 9 | 10 | [libs] 11 | .*flow-typed.* 12 | 13 | [lints] 14 | 15 | [options] 16 | module.file_ext=.ts 17 | module.file_ext=.tsx 18 | module.system.node.resolve_dirname=node_modules 19 | module.system.node.resolve_dirname=. 20 | module.name_mapper.extension='svg' -> '/src/helpers/SVGModule.js' 21 | 22 | [strict] 23 | -------------------------------------------------------------------------------- /webui/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # misc 10 | .rocks 11 | build 12 | .idea 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | graphql.schema.json 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | /cypress/* 24 | !/cypress/integration 25 | !/cypress/support 26 | !/cypress/fixtures 27 | !/cypress/snapshots 28 | cypress/snapshots/**/__diff_output__ 29 | -------------------------------------------------------------------------------- /webui/.importsortrc.js: -------------------------------------------------------------------------------- 1 | module.exports = require("@tarantool.io/import-sort-style/config"); 2 | -------------------------------------------------------------------------------- /webui/.npmrc: -------------------------------------------------------------------------------- 1 | legacy-peer-deps=true 2 | no-optional=true 3 | -------------------------------------------------------------------------------- /webui/.nvmrc: -------------------------------------------------------------------------------- 1 | 16.8.0 -------------------------------------------------------------------------------- /webui/.prettierignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /src/generated/* 3 | !/src/generated/graphql-typing-ts.ts 4 | -------------------------------------------------------------------------------- /webui/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = require('@tarantool.io/prettier-config/with-import-sort'); 2 | -------------------------------------------------------------------------------- /webui/README.md: -------------------------------------------------------------------------------- 1 | # Cartridge frontend documentation 2 | 3 | ## Configurable parameters via frontend core variables 4 | 5 | `cartridge_refresh_interval` - Cluster topology refresh interval. 6 | 7 | `cartridge_stat_period` - Refresh period for all cluster stats 8 | (includes issues, suggestions and server stats). 9 | 10 | `cartridge_hide_all_rw` - Hide 'Make all instances writeable' configuration field 11 | ('Create replica set' and 'Edit replica set' forms). 12 | 13 | ## Emittable frontend core events 14 | 15 | Events dispatchable by module `cartridge`: 16 | 17 | `cluster:login:done` - Emits after successful authorization. 18 | Provides object describing auth state and username. 19 | 20 | `cluster:logout:done` - Emits after successful logging out. 21 | -------------------------------------------------------------------------------- /webui/codegen.yml: -------------------------------------------------------------------------------- 1 | overwrite: true 2 | schema: "../doc/schema.graphql" 3 | documents: "**/*.graphql.js" 4 | generates: 5 | src/generated/graphql-typing-flow.js: 6 | plugins: 7 | - "flow" 8 | - "flow-operations" 9 | src/generated/graphql-typing-ts.ts: 10 | hooks: 11 | afterOneFileWrite: 12 | - prettier --write 13 | plugins: 14 | - "typescript" 15 | - "typescript-operations" 16 | config: 17 | skipTypename: false 18 | documentMode: documentNode 19 | dedupeOperationSuffix: true 20 | pureMagicComment: true 21 | useTypeImports: true 22 | ./graphql.schema.json: 23 | plugins: 24 | - "introspection" 25 | config: 26 | scalars: 27 | Long: number 28 | -------------------------------------------------------------------------------- /webui/config/jest/cssTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // This is a custom Jest transformer turning style imports into empty objects. 4 | // http://facebook.github.io/jest/docs/en/webpack.html 5 | 6 | module.exports = { 7 | process() { 8 | return 'module.exports = {};'; 9 | }, 10 | getCacheKey() { 11 | // The output is always the same. 12 | return 'cssTransform'; 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /webui/config/jest/fileTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const path = require('path'); 4 | 5 | // This is a custom Jest transformer turning file imports into filenames. 6 | // http://facebook.github.io/jest/docs/en/webpack.html 7 | 8 | module.exports = { 9 | process(src, filename) { 10 | return `module.exports = ${JSON.stringify(path.basename(filename))};`; 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /webui/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:8080", 3 | "trashAssetsBeforeRuns": false, 4 | "defaultCommandTimeout": 10000, 5 | "viewportWidth": 1280, 6 | "viewportHeight": 768, 7 | "video": false, 8 | "env": { 9 | "launcherHost": "127.0.0.1", 10 | "launcherPort": 3333, 11 | "updateSnapshots": false 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /webui/cypress/fixtures/files/config.bad.yml: -------------------------------------------------------------------------------- 1 | topology: {} 2 | # Uploading this config will fail with the error: 3 | # "uploading system section is forbidden" 4 | -------------------------------------------------------------------------------- /webui/cypress/fixtures/files/config.good.yml: -------------------------------------------------------------------------------- 1 | custom_section: {} 2 | -------------------------------------------------------------------------------- /webui/cypress/integration/plugin.spec.js: -------------------------------------------------------------------------------- 1 | describe('Test the plugin', () => { 2 | it('return result', () => { 3 | cy.task('tarantool', { 4 | code: ` 5 | print('Hello, Tarantool!') 6 | return 1, 2, 3 7 | `, 8 | }).should('deep.eq', [1, 2, 3]); 9 | }); 10 | 11 | it.skip('tarantool raises', () => { 12 | cy.task('tarantool', { 13 | code: `error('Artificial error')`, 14 | }); 15 | }); 16 | 17 | it.skip('connection refused', () => { 18 | cy.task('tarantool', { 19 | host: 'unix/', 20 | port: '/dev/null', 21 | code: ` 22 | return true 23 | `, 24 | }); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginForm.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginForm.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginForm.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginForm.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginForm.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginForm.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginForm.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginForm.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginSplash.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginSplash.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginSplash.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginSplash.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginSplash.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginSplash.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/LoginSplash.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/LoginSplash.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/UsersPage.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/UsersPage.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/UsersPage.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/UsersPage.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/UsersPage.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/UsersPage.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/auth.spec.js/UsersPage.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/auth.spec.js/UsersPage.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/3UnconfiguredServers.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ConfigurationServer.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ExpelServer.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/bootstrap.spec.js/ReplicaserServerDropdown.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/BaseCodePage.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/DeleteFileModalWindow.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/ReloadFilesWindow.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/code-page.spec.js/gh-1201.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/code-page.spec.js/gh-1201.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/configuration-file-page.spec.js/ConfigurationFilePage.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/disable-server.spec.js/ServerDetailsModalServerDead.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/ClusterIssuesModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlDisabled.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverControlEvantual.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalEvantualEtcd.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/failover.spec.js/FailoverModalStatefulTarantoolMode.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/force-apply-config.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCluster.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsCode.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsConfFile.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/network-error-splash.spec.js/NetworkProblemsUsers.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/probe-server.spec.js/ProbeServerModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/ClusterSuggestionsPanel.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/restart-replication.spec.js/RestartReplicationSuggestionModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ActiveZoneSection.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/EmptyZoneSection.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalCartridge1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalGeneral1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalIssues1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalMembership1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalNetwork1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalReplication1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalStorage1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Router1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ServerDetailsModalVshard-Storage1.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/server-details.spec.js/ZoneAddModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/Dashboard.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/Dashboard.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/Dashboard.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/Dashboard.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/Dashboard.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/Dashboard.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/Dashboard.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/Dashboard.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalDisabled.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalEventual.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/switchover.spec.js/FailoverModalStateful.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/EditUserForm.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/EditUserForm.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/EditUserForm.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/EditUserForm.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/EditUserForm.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/EditUserForm.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/EditUserForm.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/EditUserForm.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginForm.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginForm.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginForm.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginForm.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginForm.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginForm.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginForm.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginForm.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginSplash.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginSplash.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginSplash.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginSplash.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginSplash.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginSplash.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/LoginSplash.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/LoginSplash.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UserRemoveModal.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UserRemoveModal.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UserRemoveModal.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UserRemoveModal.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UserRemoveModal.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UserRemoveModal.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UserRemoveModal.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UserRemoveModal.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UsersPage.1260x760.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UsersPage.1260x760.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UsersPage.1280x720.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UsersPage.1280x720.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UsersPage.1440x900.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UsersPage.1440x900.snap.png -------------------------------------------------------------------------------- /webui/cypress/snapshots/users.spec.js/UsersPage.1920x1080.snap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tarantool/cartridge/243a4a527f453e212576e2265dc14b8e2d234031/webui/cypress/snapshots/users.spec.js/UsersPage.1920x1080.snap.png -------------------------------------------------------------------------------- /webui/cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // ******************************************* 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // You can change the location of this file or turn off 8 | // automatically serving support files with the 9 | // 'supportFile' configuration option. 10 | // 11 | // You can read more here: 12 | // https://on.cypress.io/configuration 13 | // *************************************** 14 | 15 | // Import commands.js using ES2015 syntax: 16 | import './commands'; 17 | 18 | // Alternatively you can use CommonJS syntax: 19 | // require('./commands') 20 | 21 | Cypress.on('uncaught:exception', (err) => { 22 | cy.log(err); 23 | // returning false here prevents Cypress from failing the test 24 | return false; 25 | }); 26 | -------------------------------------------------------------------------------- /webui/example.lua: -------------------------------------------------------------------------------- 1 | local http = require('http.server') 2 | box.cfg{} 3 | 4 | local httpd = http.new('localhost', 8080) 5 | httpd:start() 6 | 7 | -------------------------------------------------------------------------------- /webui/flow-typed/graphql-introspection.flow.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | type __Description = string | null 4 | 5 | declare type __TypeKind = 'SCALAR' 6 | | 'OBJECT' 7 | | 'INTERFACE' 8 | | 'UNION' 9 | | 'ENUM' 10 | | 'INPUT_OBJECT' 11 | | 'LIST' 12 | | 'NON_NULL' 13 | 14 | declare type __Type = { 15 | kind: __TypeKind, 16 | name: string, 17 | description: __Description, 18 | fields: Array<__Field>, 19 | interfaces?: Array<__Type>, 20 | possibleTypes?: Array<__Type>, 21 | inputFields?: Array<__InputValue>, 22 | ofType?: __Type 23 | } 24 | 25 | 26 | declare type __InputValue = { 27 | name: string, 28 | description: __Description, 29 | type: __Type, 30 | defaultValue: any, 31 | } 32 | 33 | declare type __Field = { 34 | name: string, 35 | description: __Description, 36 | args: Array<__InputValue>, 37 | type: __Type, 38 | isDeprecated: boolean, 39 | deprecationReason?: string 40 | } 41 | -------------------------------------------------------------------------------- /webui/flow-typed/icon.js: -------------------------------------------------------------------------------- 1 | type Glyph = { 2 | content: string, 3 | id: string, 4 | node: any, 5 | viewBox: string, 6 | }; 7 | -------------------------------------------------------------------------------- /webui/flow-typed/redux.js: -------------------------------------------------------------------------------- 1 | declare type FSA = { 2 | type: string, 3 | payload?: any, 4 | error?: boolean 5 | }; 6 | -------------------------------------------------------------------------------- /webui/flow-typed/utils.js: -------------------------------------------------------------------------------- 1 | type History = { 2 | push: (url: string | { search: string }) => void, 3 | } 4 | 5 | type Location = { 6 | search: string, 7 | href: string, 8 | } 9 | -------------------------------------------------------------------------------- /webui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx,mjs}'], 3 | setupFiles: ['@tarantool.io/webpack-config/polyfills.js'], 4 | testMatch: [ 5 | '/src/**/__tests__/**/*.{js,jsx,ts,tsx,mjs}', 6 | '/src/**/?(*.)(spec|test).{js,jsx,ts,tsx,mjs}', 7 | ], 8 | testEnvironment: 'node', 9 | testURL: 'http://localhost', 10 | transform: { 11 | '^.+\\.(js|jsx|mjs)$': 'babel-jest', 12 | '^.+\\.(ts|tsx)$': 'ts-jest', 13 | '^.+\\.css$': '/config/jest/cssTransform.js', 14 | '^(?!.*\\.(js|jsx|ts|tsx|mjs|css|json)$)': '/config/jest/fileTransform.js', 15 | }, 16 | transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$'], 17 | moduleNameMapper: { 18 | '^src/(.*)$': '/src/$1', 19 | '^~/(.*)$': '/src/$1', 20 | }, 21 | moduleFileExtensions: ['web.js', 'js', 'ts', 'json', 'web.jsx', 'jsx', 'tsx', 'node', 'mjs'], 22 | }; 23 | -------------------------------------------------------------------------------- /webui/module-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "namespace": "cluster" 3 | } 4 | -------------------------------------------------------------------------------- /webui/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Tarantool Cluster 8 | 9 | 10 | 13 |
14 |
15 |
16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /webui/scripts/test.js: -------------------------------------------------------------------------------- 1 | const { initEnv } = require('@tarantool.io/webpack-config'); 2 | 3 | // Do this as the first thing so that any code reading it knows the right env. 4 | process.env.BABEL_ENV = 'test'; 5 | process.env.NODE_ENV = 'test'; 6 | process.env.PUBLIC_URL = ''; 7 | 8 | // Makes the script crash on unhandled rejections instead of silently 9 | // ignoring them. In the future, promise rejections that are not handled will 10 | // terminate the Node.js process with a non-zero exit code. 11 | process.on('unhandledRejection', (err) => { 12 | throw err; 13 | }); 14 | 15 | initEnv(); 16 | 17 | const jest = require('jest'); 18 | let argv = process.argv.slice(2); 19 | 20 | jest.run(argv); 21 | -------------------------------------------------------------------------------- /webui/src/api/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | getErrorMessage, 3 | getNetworkErrorMessage, 4 | isDeadServerError, 5 | isNetworkError, 6 | isRestErrorResponse, 7 | } from './utils'; 8 | 9 | export { getErrorMessage, getNetworkErrorMessage, isNetworkError, isRestErrorResponse, isDeadServerError }; 10 | 11 | export const SERVER_NOT_REACHABLE_ERROR_TYPE = 'SERVER_NOT_REACHABLE_ERROR_TYPE'; 12 | -------------------------------------------------------------------------------- /webui/src/components/AuthSessionChangeModal/AuthSessionChangeModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { baseFontFamily } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | root: css` 6 | font-family: ${baseFontFamily}; 7 | `, 8 | }; 9 | -------------------------------------------------------------------------------- /webui/src/components/AuthSessionChangeModal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AuthSessionChangeModal'; 2 | -------------------------------------------------------------------------------- /webui/src/components/Label.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import React from 'react'; 3 | import { css, cx } from '@emotion/css'; 4 | import { Text, colors } from '@tarantool.io/ui-kit'; 5 | 6 | const styles = { 7 | label: css` 8 | display: inline-block; 9 | padding: 1px 9px 1px 10px; 10 | font-size: 11px; 11 | line-height: 17px; 12 | color: ${colors.dark65}; 13 | background-color: ${colors.intentBase}; 14 | text-transform: uppercase; 15 | `, 16 | }; 17 | 18 | type Props = { 19 | className?: string, 20 | children?: React$Node, 21 | }; 22 | 23 | export const Label = ({ className, children }: Props) => ( 24 | 25 | {children} 26 | 27 | ); 28 | -------------------------------------------------------------------------------- /webui/src/components/NetworkErrorSplash/NetworkErrorSplash.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/ban-ts-comment */ 2 | import React from 'react'; 3 | import { useStore } from 'effector-react'; 4 | // @ts-ignore 5 | import { NotificationSplashFixed } from '@tarantool.io/ui-kit'; 6 | 7 | import { app } from 'src/models'; 8 | 9 | const { $connectionAlive } = app; 10 | 11 | export interface NetworkErrorSplashProps { 12 | onClose?: () => void; 13 | } 14 | 15 | const NetworkErrorSplash = ({ onClose }: NetworkErrorSplashProps) => { 16 | const connectionAlive = useStore($connectionAlive); 17 | 18 | if (connectionAlive) { 19 | return null; 20 | } 21 | 22 | return ( 23 | 24 | Network connection problem or server disconnected 25 | 26 | ); 27 | }; 28 | 29 | export default NetworkErrorSplash; 30 | -------------------------------------------------------------------------------- /webui/src/components/NetworkErrorSplash/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './NetworkErrorSplash'; 2 | export type { NetworkErrorSplashProps } from './NetworkErrorSplash'; 3 | -------------------------------------------------------------------------------- /webui/src/components/PageDataErrorMessage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './PageDataErrorMessage'; 2 | -------------------------------------------------------------------------------- /webui/src/components/PageLayout.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import React from 'react'; 3 | import { PageLayout as PageLayoutKit } from '@tarantool.io/ui-kit'; 4 | import type { PageLayoutProps } from '@tarantool.io/ui-kit'; 5 | 6 | import DemoInfo from './DemoInfo'; 7 | 8 | export const PageLayout = (props: PageLayoutProps) => ; 9 | -------------------------------------------------------------------------------- /webui/src/components/Panel.js: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | export const Panel = styled.div` 4 | padding: 20px; 5 | margin-bottom: 8px; 6 | border-radius: 4px; 7 | background-color: #ffffff; 8 | `; 9 | -------------------------------------------------------------------------------- /webui/src/components/ReplicasetList/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './ReplicasetList'; 2 | -------------------------------------------------------------------------------- /webui/src/components/ServerLabels.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import React from 'react'; 3 | import { TagsList } from '@tarantool.io/ui-kit'; 4 | 5 | export type Label = { 6 | name: string, 7 | value: string, 8 | }; 9 | 10 | export type ServerLabelsProps = { 11 | className?: string, 12 | labels?: Label[], 13 | onLabelClick?: (label: Label) => void, 14 | highlightingOnHover?: string, 15 | }; 16 | 17 | const ServerLabels = ({ className, highlightingOnHover, labels, onLabelClick }: ServerLabelsProps) => { 18 | if (!labels || !labels.length) return null; 19 | 20 | return ( 21 | `${name}: ${value}`} 27 | onTagClick={onLabelClick} 28 | /> 29 | ); 30 | }; 31 | 32 | export default ServerLabels; 33 | -------------------------------------------------------------------------------- /webui/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const PROJECT_NAME = 'cluster'; 2 | 3 | export const REFRESH_LIST_INTERVAL = 2500; 4 | 5 | export const STAT_REQUEST_PERIOD = 3; 6 | 7 | // const DEFAULT_VSHARD_GROUP_NAME = 'default'; // indicates vshard groups are disabled 8 | 9 | export const LS_CODE_EDITOR_OPENED_FILE = 'tarantool_cartridge_editor_opened_file'; 10 | export const SS_CODE_EDITOR_CURSOR_POSITION = 'tarantool_cartridge_editor_cursor_position'; 11 | 12 | export const FAILOVER_STATE_PROVIDERS = [ 13 | { value: 'tarantool', label: 'Tarantool (stateboard)' }, 14 | { value: 'etcd2', label: 'Etcd' }, 15 | ]; 16 | 17 | export const BUILT_IN_USERS = ['admin']; 18 | 19 | export const AUTH_TRIGGER_SESSION_KEY = 'tt.auth.trigger'; 20 | -------------------------------------------------------------------------------- /webui/src/generated/graphql-typing.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | export * from './graphql-typing-flow'; 3 | -------------------------------------------------------------------------------- /webui/src/helpers/SVGModule.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | export default { 4 | content: '', 5 | id: '', 6 | node: '', 7 | viewBox: '', 8 | }; 9 | -------------------------------------------------------------------------------- /webui/src/misc/decomposeTarantoolUri.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | type DecomposedUri = { 4 | user: string, 5 | password: string, 6 | host: string, 7 | port: string, 8 | }; 9 | 10 | export const decomposeTarantoolUri = (uri: string): DecomposedUri => { 11 | const [credentials, server] = uri.split('@'); 12 | const [user, password] = credentials.split(':'); 13 | const [host, port] = server.split(':'); 14 | return { 15 | user, 16 | password, 17 | host, 18 | port, 19 | }; 20 | }; 21 | 22 | export const validateTarantoolUri = (uri: string): boolean => { 23 | try { 24 | const { user, password, host, port } = decomposeTarantoolUri(uri); 25 | return !!(user && password && host && port); 26 | } catch (e) { 27 | return false; 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /webui/src/misc/decomposeTarantoolUri.test.js: -------------------------------------------------------------------------------- 1 | import { decomposeTarantoolUri, validateTarantoolUri } from './decomposeTarantoolUri.js'; 2 | 3 | test('decompose tarantool uri test', () => { 4 | const test = 'https://tarantool.io'; 5 | const validUri = 'admin:npngatmwsf@try-cartridge.tarantool.io:10300'; 6 | expect(validateTarantoolUri(test)).toBe(false); 7 | expect(validateTarantoolUri('')).toBe(false); 8 | expect(validateTarantoolUri(null)).toBe(false); 9 | expect(validateTarantoolUri(validUri)).toBe(true); 10 | const { user, password, host, port } = decomposeTarantoolUri(validUri); 11 | expect(user).toBe('admin'); 12 | expect(password).toBe('npngatmwsf'); 13 | expect(host).toBe('try-cartridge.tarantool.io'); 14 | expect(port).toBe('10300'); 15 | }); 16 | -------------------------------------------------------------------------------- /webui/src/misc/eventHandler.js: -------------------------------------------------------------------------------- 1 | export const subscribeOnTargetEvent = (target, event, handler) => { 2 | target.addEventListener(event, handler); 3 | return () => { 4 | target.removeEventListener(event, handler); 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /webui/src/misc/files.utils.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | const allowedFileExtensionsRegEx = /\.((lua)|(yml))$/; 4 | 5 | export const validateFileNameExtension = (filename: string) => { 6 | return allowedFileExtensionsRegEx.test(filename); 7 | }; 8 | 9 | /** 10 | * 11 | * @param {string} ownPath - own path of a examined file or folder 12 | * @param {string} parentPath - a folder's path (NO trailing slash "/"!) 13 | * @returns {boolean} 14 | */ 15 | export const isDescendant = (ownPath: string, parentPath: string): boolean => { 16 | return ownPath.substring(0, parentPath.length + 1) === `${parentPath}/`; 17 | }; 18 | -------------------------------------------------------------------------------- /webui/src/misc/isNetworkError.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | export const isNetworkError = (err: any): boolean => { 3 | return err instanceof Error && err.message.toLowerCase().indexOf('network error') === 0; 4 | }; 5 | -------------------------------------------------------------------------------- /webui/src/misc/lazySection.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { SectionLoadError } from 'src/components/SectionLoadError'; 4 | 5 | export const createLazySection = (dynamicImport, Fallback) => { 6 | return class LazySection extends React.Component { 7 | state = { hasError: false }; 8 | 9 | static getDerivedStateFromError() { 10 | return { hasError: true }; 11 | } 12 | 13 | resetError = () => this.setState({ hasError: false }); 14 | 15 | render() { 16 | const { children, ...props } = this.props; 17 | 18 | const FallbackComponent = Fallback || SectionLoadError; 19 | 20 | return this.state.hasError ? ( 21 | 22 | ) : ( 23 | React.createElement(React.lazy(dynamicImport), props, children) 24 | ); 25 | } 26 | }; 27 | }; 28 | -------------------------------------------------------------------------------- /webui/src/misc/server.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | type Server = { 3 | alias?: string, 4 | uri: string, 5 | }; 6 | 7 | export const formatServerName = (server: Server) => (server.alias ? server.alias : server.uri); 8 | -------------------------------------------------------------------------------- /webui/src/misc/yamlValidation.js: -------------------------------------------------------------------------------- 1 | import yaml from 'js-yaml'; 2 | import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; 3 | 4 | const convertYAMLExceptionToMonacoMarker = (exception) => { 5 | const { mark, message } = exception; 6 | if (!mark) { 7 | return null; 8 | } 9 | 10 | return { 11 | endColumn: mark.column + 1, 12 | endLineNumber: mark.line + 1, 13 | message, 14 | startColumn: mark.column + 1, 15 | startLineNumber: mark.line + 1, 16 | severity: monaco.MarkerSeverity.Error, 17 | }; 18 | }; 19 | 20 | export const getYAMLError = (data) => { 21 | try { 22 | yaml.safeLoad(data); 23 | return null; 24 | } catch (error) { 25 | return convertYAMLExceptionToMonacoMarker(error); 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /webui/src/models/app/domain.ts: -------------------------------------------------------------------------------- 1 | import { createDomain } from 'effector'; 2 | 3 | export const domain = createDomain('Tarantool Cartridge Effector Domain'); 4 | -------------------------------------------------------------------------------- /webui/src/models/app/messages.ts: -------------------------------------------------------------------------------- 1 | export const errors = { 2 | REQUIRED: 'Field required', 3 | NUMBER_FLOAT: 'Field accepts number, ex: 0, 1, 2.43...', 4 | }; 5 | -------------------------------------------------------------------------------- /webui/src/models/app/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './common'; 2 | export * from './effector'; 3 | -------------------------------------------------------------------------------- /webui/src/models/app/variables.ts: -------------------------------------------------------------------------------- 1 | import { REFRESH_LIST_INTERVAL, STAT_REQUEST_PERIOD } from 'src/constants'; 2 | 3 | import { parseIntSafe } from './utils'; 4 | 5 | const wtv = () => window['__tarantool_variables'] || {}; 6 | 7 | export const cartridge_refresh_interval = (): number => 8 | parseIntSafe(wtv().cartridge_refresh_interval, REFRESH_LIST_INTERVAL); 9 | 10 | export const cartridge_stat_period = (): number => parseIntSafe(wtv().cartridge_stat_period, STAT_REQUEST_PERIOD); 11 | 12 | export const cartridge_hide_all_rw = (): boolean => wtv().cartridge_hide_all_rw === true; 13 | -------------------------------------------------------------------------------- /webui/src/models/app/yup.ts: -------------------------------------------------------------------------------- 1 | import * as yup from 'yup'; 2 | 3 | export { yup }; 4 | -------------------------------------------------------------------------------- /webui/src/models/cluster/failover/types.ts: -------------------------------------------------------------------------------- 1 | import type { GetFailoverParamsQuery, StateProviderStatus } from 'src/generated/graphql-typing-ts'; 2 | import type { Maybe } from 'src/models'; 3 | 4 | export type Failover = Maybe; 5 | export type { StateProviderStatus }; 6 | -------------------------------------------------------------------------------- /webui/src/models/cluster/init.ts: -------------------------------------------------------------------------------- 1 | import './page/init'; 2 | import './server-list/init'; 3 | import './server-details/init'; 4 | import './server-configure/init'; 5 | import './replicaset-configure/init'; 6 | import './rebalancer-configure/init'; 7 | import './rebalancer-mode-configure/init'; 8 | import './server-expel/init'; 9 | import './server-probe/init'; 10 | import './server-suggestions/init'; 11 | import './failover/init'; 12 | import './zones/init'; 13 | import './suggestions/init'; 14 | import './add-labels/init'; 15 | -------------------------------------------------------------------------------- /webui/src/models/cluster/page/paths.ts: -------------------------------------------------------------------------------- 1 | import { PROJECT_NAME } from 'src/constants'; 2 | 3 | const path = (path: string) => `/${PROJECT_NAME}/${path}`; 4 | 5 | export const root = () => path('dashboard'); 6 | 7 | export const serverDetails = ({ uuid }: { uuid: string }) => path(`dashboard/instance/${uuid}`); 8 | 9 | export const replicasetConfigure = ({ uuid }: { uuid: string }) => { 10 | return path(`dashboard?r=${uuid}`); 11 | }; 12 | 13 | export const serverConfigure = ({ uri }: { uri: string }) => { 14 | return path(`dashboard?s=${uri}`); 15 | }; 16 | -------------------------------------------------------------------------------- /webui/src/models/cluster/replicaset-configure/types.ts: -------------------------------------------------------------------------------- 1 | export interface ClusterReplicasetConfigureGateProps { 2 | uuid: string; 3 | } 4 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-configure/types.ts: -------------------------------------------------------------------------------- 1 | import type { EditReplicasetInput } from 'src/generated/graphql-typing-ts'; 2 | 3 | export interface ClusterServeConfigureGateProps { 4 | uri: string; 5 | } 6 | 7 | export interface JoinReplicasetProps { 8 | uri: string; 9 | uuid: string; 10 | } 11 | 12 | export type CreateReplicasetProps = Omit; 13 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-details/types.ts: -------------------------------------------------------------------------------- 1 | import type { InstanceDataQuery } from 'src/generated/graphql-typing-ts'; 2 | 3 | export type InstanceDataQueryServer = NonNullable['servers']>[number]>; 4 | export type InstanceDataQueryDescription = NonNullable['descriptionCartridge']>; 5 | 6 | export type ServerDetailsDescriptionsNames = 7 | | 'general' 8 | | 'cartridge' 9 | | 'replication' 10 | | 'storage' 11 | | 'network' 12 | | 'membership' 13 | | 'vshard_router' 14 | | 'vshard_storage'; 15 | 16 | export type ServerDetailsDescriptions = Record>; 17 | 18 | export type ServerDetails = { 19 | server: InstanceDataQueryServer; 20 | descriptions: ServerDetailsDescriptions; 21 | }; 22 | 23 | export interface ClusterServerDetailsGateProps { 24 | uuid: string; 25 | } 26 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-expel/types.ts: -------------------------------------------------------------------------------- 1 | export interface ExpelServerEventPayload { 2 | uri: string; 3 | } 4 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-probe/index.ts: -------------------------------------------------------------------------------- 1 | import { combine } from 'effector'; 2 | 3 | import { app } from 'src/models'; 4 | 5 | // events 6 | export const serverProbeModalOpenEvent = app.domain.createEvent('server probe modal open event'); 7 | export const serverProbeModalCloseEvent = app.domain.createEvent('server probe modal close event'); 8 | export const serverProbeEvent = app.domain.createEvent<{ uri: string }>('server probe event'); 9 | 10 | // stores 11 | export const $serverProbeModalVisible = app.domain.createStore(false); 12 | export const $serverProbeModalError = app.domain.createStore(null); 13 | 14 | // effects 15 | export const serverProbeFx = app.domain.createEffect<{ uri: string }, void>('expel server'); 16 | 17 | // computed 18 | export const $serverProbeModal = combine({ 19 | visible: $serverProbeModalVisible, 20 | error: $serverProbeModalError, 21 | pending: serverProbeFx.pending, 22 | }); 23 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-suggestions/selectors.ts: -------------------------------------------------------------------------------- 1 | import type { GetCompressionCluster, GetCompressionClusterCompressionCompressionInfo } from './types'; 2 | 3 | export const clusterCompressionInfo = ( 4 | data: GetCompressionCluster 5 | ): GetCompressionClusterCompressionCompressionInfo => { 6 | return data?.cluster?.cluster_compression.compression_info ?? []; 7 | }; 8 | -------------------------------------------------------------------------------- /webui/src/models/cluster/server-suggestions/types.ts: -------------------------------------------------------------------------------- 1 | import type { GetClusterCompressionQuery } from 'src/generated/graphql-typing-ts'; 2 | import type { Maybe } from 'src/models'; 3 | 4 | export type GetCompressionCluster = Maybe; 5 | export type GetCompressionClusterCompression = NonNullable< 6 | Required>['cluster'] 7 | >['cluster_compression']; 8 | export type GetCompressionClusterCompressionCompressionInfo = 9 | NonNullable['compression_info']; 10 | 11 | export interface CompressionSuggestion { 12 | type: 'compression'; 13 | meta: { 14 | instanceId: string; 15 | spaceName: string; 16 | fields: Array<{ name: string; compressionPercentage: number }>; 17 | }; 18 | } 19 | 20 | export type Suggestion = CompressionSuggestion; 21 | -------------------------------------------------------------------------------- /webui/src/models/cluster/suggestions/types.ts: -------------------------------------------------------------------------------- 1 | export type CheckedServers = { 2 | [key: string]: boolean; 3 | }; 4 | 5 | /* 6 | * It was decided to combine elements from 'config_locked' and 'config_mismatch' 7 | * into one group 'config_error'. 8 | */ 9 | export type ForceApplySuggestionByReason = [['operation_error', string[]], ['config_error', string[]]]; 10 | 11 | export interface SuggestionsPanelsVisibility { 12 | advertiseURI: boolean; 13 | disableServers: boolean; 14 | forceApply: boolean; 15 | restartReplication: boolean; 16 | } 17 | -------------------------------------------------------------------------------- /webui/src/models/cluster/types.ts: -------------------------------------------------------------------------------- 1 | export * from './replicaset-configure/types'; 2 | export * from './server-configure/types'; 3 | export * from './server-details/types'; 4 | export * from './server-expel/types'; 5 | export * from './server-list/types'; 6 | export * from './failover/types'; 7 | export * from './suggestions/types'; 8 | -------------------------------------------------------------------------------- /webui/src/models/index.ts: -------------------------------------------------------------------------------- 1 | import * as app from './app'; 2 | import * as cluster from './cluster'; 3 | import * as migrations from './migrations'; 4 | 5 | export * from './types'; 6 | export { app, cluster, migrations }; 7 | -------------------------------------------------------------------------------- /webui/src/models/init.ts: -------------------------------------------------------------------------------- 1 | import './app/init'; 2 | import './cluster/init'; 3 | -------------------------------------------------------------------------------- /webui/src/models/types.ts: -------------------------------------------------------------------------------- 1 | export * from './app/types'; 2 | export * from './cluster/types'; 3 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/ClusterControllers.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { core } from '@tarantool.io/frontend-core'; 3 | 4 | import { cluster } from 'src/models'; 5 | 6 | import ReplicasetConfigureModalController from './components/ReplicasetConfigureModalController'; 7 | import ServerConfigureModalController from './components/ServerConfigureModalController'; 8 | import ServerDetailsModalController from './components/ServerDetailsModalController'; 9 | 10 | const { AppTitle } = core.components; 11 | const { page } = cluster; 12 | const { ClusterPageGate } = page; 13 | 14 | export const ClusterControllers = ({ title }: { title: string }) => ( 15 | <> 16 | {AppTitle ? : null} 17 | 18 | 19 | 20 | 21 | 22 | ); 23 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/ClusterPanels.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import BootstrapPanel from './components/BootstrapPanel'; 4 | import ClusterSuggestionsPanel from './components/ClusterSuggestionsPanel'; 5 | 6 | export const ClusterPanels = () => ( 7 | <> 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/BootstrapButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './BootstrapButton'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/BootstrapPanel/BootstrapPanel.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | 3 | export const styles = { 4 | iconMargin: css` 5 | margin-right: 8px; 6 | `, 7 | row: css` 8 | display: flex; 9 | align-items: center; 10 | margin-bottom: 16px; 11 | `, 12 | }; 13 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/BootstrapPanel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './BootstrapPanel'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ButtonsPanel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ButtonsPanel'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterAddLabelModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './AddLabelForServerModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterIssuesModal/ClusterIssuesModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | list: css` 6 | padding: 0; 7 | `, 8 | title: css` 9 | color: ${colors.dark40}; 10 | `, 11 | issueContent: css` 12 | padding-bottom: 10px; 13 | margin-bottom: 10px; 14 | border-bottom: 1px solid ${colors.intentBase}; 15 | `, 16 | titleCritical: css` 17 | color: ${colors.intentWarningAccent}; 18 | `, 19 | }; 20 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterIssuesModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ClusterIssuesModal'; 2 | export type { ClusterIssuesModalProps } from './ClusterIssuesModal'; 3 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsModal/ClusterSuggestionsModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | btn: css` 6 | background: ${colors.intentDanger}; 7 | color: ${colors.intentBaseActive}; 8 | &:hover { 9 | background: ${colors.intentDanger}; 10 | } 11 | `, 12 | 13 | content: css` 14 | padding: 0; 15 | `, 16 | suggestion: css` 17 | padding-bottom: 10px; 18 | margin-bottom: 10px; 19 | border-bottom: 1px solid ${colors.intentBase}; 20 | `, 21 | }; 22 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ClusterSuggestionsModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/ClusterSuggestionsPanel.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | 3 | export const styles = { 4 | wrap: css` 5 | margin-bottom: 22px; 6 | `, 7 | panel: css` 8 | display: flex; 9 | justify-content: space-between; 10 | align-items: center; 11 | margin-bottom: 20px; 12 | `, 13 | heading: css` 14 | margin-bottom: 6px; 15 | `, 16 | }; 17 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/AdvertiseURISuggestionModal/AdvertiseURISuggestionModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | msg: css` 6 | margin-bottom: 20px; 7 | white-space: pre-line; 8 | `, 9 | list: css` 10 | list-style: none; 11 | padding-left: 0; 12 | color: ${colors.dark65}; 13 | `, 14 | listItem: css` 15 | margin-bottom: 11px; 16 | 17 | &:last-child { 18 | margin-bottom: 0; 19 | } 20 | `, 21 | }; 22 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/AdvertiseURISuggestionModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './AdvertiseURISuggestionModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/DisableServersSuggestionModal/DisableServersSuggestionModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | msg: css` 6 | margin-bottom: 20px; 7 | white-space: pre-line; 8 | `, 9 | list: css` 10 | list-style: none; 11 | padding-left: 0; 12 | color: ${colors.dark65}; 13 | `, 14 | listItem: css` 15 | margin-bottom: 11px; 16 | 17 | &:last-child { 18 | margin-bottom: 0; 19 | } 20 | `, 21 | }; 22 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/DisableServersSuggestionModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './DisableServersSuggestionModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/ForceApplySuggestionModal/ForceApplySuggestionModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | msg: css` 6 | margin-bottom: 20px; 7 | white-space: pre-line; 8 | `, 9 | list: css` 10 | list-style: none; 11 | padding-left: 0; 12 | color: ${colors.dark65}; 13 | `, 14 | listItem: css` 15 | margin-bottom: 11px; 16 | 17 | &:last-child { 18 | margin-bottom: 0; 19 | } 20 | `, 21 | }; 22 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/ForceApplySuggestionModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ForceApplySuggestionModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/RestartReplicationsSuggestionModal/RestartReplicationsSuggestionModal.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | msg: css` 6 | margin-bottom: 20px; 7 | white-space: pre-line; 8 | `, 9 | list: css` 10 | list-style: none; 11 | padding-left: 0; 12 | color: ${colors.dark65}; 13 | `, 14 | listItem: css` 15 | margin-bottom: 11px; 16 | 17 | &:last-child { 18 | margin-bottom: 0; 19 | } 20 | `, 21 | }; 22 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/components/RestartReplicationsSuggestionModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './RestartReplicationsSuggestionModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ClusterSuggestionsPanel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ClusterSuggestionsPanel'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeader/CountHeader.styles.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { baseFontFamily, colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | root: css` 6 | font-family: ${baseFontFamily}; 7 | font-size: 14px; 8 | font-weight: 400; 9 | line-height: 22px; 10 | 11 | color: ${colors.dark}; 12 | 13 | & + & { 14 | margin-left: 10px; 15 | } 16 | `, 17 | label: css``, 18 | counter: css` 19 | padding-left: 5px; 20 | color: ${colors.dark40}; 21 | `, 22 | }; 23 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { CountHeader } from './CountHeader'; 2 | export type { CountHeaderProps } from './CountHeader'; 3 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderDelimiter/CountHeaderDelimiter.styles.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { baseFontFamily, colors } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | root: css` 6 | font-family: ${baseFontFamily}; 7 | font-size: 14px; 8 | line-height: 22px; 9 | font-weight: 400; 10 | 11 | color: ${colors.dark15}; 12 | margin: 0 10px; 13 | `, 14 | }; 15 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderDelimiter/CountHeaderDelimiter.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react'; 2 | 3 | import { styles } from './CountHeaderDelimiter.styles'; 4 | 5 | export const CountHeaderDelimiter = memo(() => { 6 | return ( 7 | 8 | | 9 | 10 | ); 11 | }); 12 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderDelimiter/index.ts: -------------------------------------------------------------------------------- 1 | export { CountHeaderDelimiter } from './CountHeaderDelimiter'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderWrapper/CountHeaderWrapper.styles.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/css'; 2 | import { baseFontFamily } from '@tarantool.io/ui-kit'; 3 | 4 | export const styles = { 5 | root: css` 6 | display: flex; 7 | flex: 1 0 auto; 8 | 9 | font-family: ${baseFontFamily}; 10 | font-size: 14px; 11 | line-height: 22px; 12 | font-weight: 400; 13 | 14 | overflow: hidden; 15 | text-overflow: ellipsis; 16 | white-space: nowrap; 17 | `, 18 | }; 19 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderWrapper/CountHeaderWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | import { cx } from '@emotion/css'; 3 | 4 | import { styles } from './CountHeaderWrapper.styles'; 5 | 6 | export interface CountHeaderWrapperProps { 7 | children: ReactNode; 8 | className?: string; 9 | } 10 | 11 | export const CountHeaderWrapper = ({ children, className }: CountHeaderWrapperProps) => { 12 | return
{children}
; 13 | }; 14 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/CountHeaderWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export { CountHeaderWrapper } from './CountHeaderWrapper'; 2 | export type { CountHeaderWrapperProps } from './CountHeaderWrapper'; 3 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ExpelServerModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ExpelServerModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/FailoverButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './FailoverButton'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/FailoverModal/FailoverModal.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/ban-ts-comment */ 2 | import React from 'react'; 3 | import { useStore } from 'effector-react'; 4 | 5 | import { cluster } from 'src/models'; 6 | 7 | import FailoverModalForm from './components/FailoverModalForm'; 8 | 9 | const { $failoverModal, $failover } = cluster.failover; 10 | const { $failoverParamsMode } = cluster.serverList; 11 | 12 | const FailoverModal = () => { 13 | const { visible } = useStore($failoverModal); 14 | const failover = useStore($failover); 15 | const mode = useStore($failoverParamsMode); 16 | 17 | return visible ? : null; 18 | }; 19 | 20 | export default FailoverModal; 21 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/FailoverModal/components/FailoverModalForm/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './FailoverModalForm'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/FailoverModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './FailoverModal'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/IssuesButton/components/IconOkContrast/IconOkContrast.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/ban-ts-comment */ 2 | import React, { memo } from 'react'; 3 | import { css, cx } from '@emotion/css'; 4 | // @ts-ignore 5 | import { GenericIconProps, IconOk } from '@tarantool.io/ui-kit'; 6 | 7 | const styles = { 8 | contrastIcon: css` 9 | fill: gray; 10 | `, 11 | }; 12 | 13 | const IconOkContrast = ({ className, ...props }: GenericIconProps) => ( 14 | 15 | ); 16 | 17 | export default memo(IconOkContrast); 18 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/IssuesButton/components/IconOkContrast/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './IconOkContrast'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/IssuesButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './IssuesButton'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/JoinReplicasetForm/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './JoinReplicasetForm'; 2 | export type { JoinReplicasetValues, JoinReplicasetProps } from './JoinReplicasetForm.form'; 3 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/Panel/Panel.tsx: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | const Panel = styled.div` 4 | padding: 20px; 5 | margin-bottom: 8px; 6 | border-radius: 4px; 7 | background-color: #ffffff; 8 | `; 9 | 10 | export default Panel; 11 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/Panel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Panel'; 2 | -------------------------------------------------------------------------------- /webui/src/pages/Cluster/components/ProbeServerButton/ProbeServerButton.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react'; 2 | import { Button } from '@tarantool.io/ui-kit'; 3 | 4 | import { cluster } from 'src/models'; 5 | 6 | const { serverProbeModalOpenEvent } = cluster.serverProbe; 7 | 8 | const ProbeServerButton = () => { 9 | return ( 10 | 14 | ); 15 | }); 16 | -------------------------------------------------------------------------------- /webui/src/pages/Migrations/components/MigrationsRefresh.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useEvent, useStore } from 'effector-react'; 3 | import { Button } from '@tarantool.io/ui-kit'; 4 | 5 | import { migrations } from 'src/models'; 6 | 7 | export const MigrationsRefresh = React.memo(() => { 8 | const pending = useStore(migrations.$requestMigrationsStatePending); 9 | const onClick = useEvent(migrations.requestMigrationsStateEvent); 10 | return ( 11 | 14 | ); 15 | }); 16 | -------------------------------------------------------------------------------- /webui/src/pages/Migrations/components/MigrationsUpButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useEvent, useStore } from 'effector-react'; 3 | import { Button } from '@tarantool.io/ui-kit'; 4 | 5 | import { migrations } from 'src/models'; 6 | 7 | export const MigrationsUpButton = React.memo(() => { 8 | const pending = useStore(migrations.$upMigrationsPending); 9 | const onClick = useEvent(migrations.upMigrationsEvent); 10 | return ( 11 | 14 | ); 15 | }); 16 | -------------------------------------------------------------------------------- /webui/src/store/actions/app.actions.js: -------------------------------------------------------------------------------- 1 | import { 2 | APP_CREATE_MESSAGE, 3 | APP_DID_MOUNT, 4 | APP_RELOAD_CLUSTER_SELF, 5 | APP_SET_MESSAGE_DONE, 6 | } from 'src/store/actionTypes'; 7 | import { getActionCreator, getPageMountActionCreator } from 'src/store/commonRequest'; 8 | 9 | export const appDidMount = getPageMountActionCreator(APP_DID_MOUNT); 10 | 11 | export const appReloadClusterSelf = getActionCreator(APP_RELOAD_CLUSTER_SELF); 12 | 13 | /* 14 | * @param {Object} payload 15 | * @param {Object} payload.content 16 | * @param {string} payload.content.type 17 | * @param {string} payload.content.text 18 | */ 19 | export const createMessage = getActionCreator(APP_CREATE_MESSAGE); 20 | 21 | /* 22 | * @param {Object} payload 23 | * @param {number} payload.index 24 | */ 25 | export const setMessageDone = getActionCreator(APP_SET_MESSAGE_DONE); 26 | -------------------------------------------------------------------------------- /webui/src/store/actions/clusterInstancePage.actions.js: -------------------------------------------------------------------------------- 1 | import { CLUSTER_INSTANCE_DID_MOUNT, CLUSTER_INSTANCE_STATE_RESET } from 'src/store/actionTypes'; 2 | import { getActionCreator, getPageMountActionCreator } from 'src/store/commonRequest'; 3 | 4 | export const pageDidMount = getPageMountActionCreator(CLUSTER_INSTANCE_DID_MOUNT); 5 | 6 | export const resetPageState = getActionCreator(CLUSTER_INSTANCE_STATE_RESET); 7 | -------------------------------------------------------------------------------- /webui/src/store/actions/editor.actions.js: -------------------------------------------------------------------------------- 1 | import { SELECT_FILE } from '../actionTypes'; 2 | 3 | export const selectFile = (fileId) => ({ 4 | type: SELECT_FILE, 5 | payload: fileId, 6 | }); 7 | -------------------------------------------------------------------------------- /webui/src/store/commonTypes.ts: -------------------------------------------------------------------------------- 1 | export type RequestStatusType = { 2 | loading: boolean; 3 | loaded: boolean; 4 | error: string | Error | null | undefined; 5 | }; 6 | -------------------------------------------------------------------------------- /webui/src/store/configureStore.js: -------------------------------------------------------------------------------- 1 | import { applyMiddleware, compose, createStore } from 'redux'; 2 | import createSagaMiddleware from 'redux-saga'; 3 | 4 | import rootReducer from './rootReducer'; 5 | import rootSaga from './rootSaga'; 6 | 7 | const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; 8 | 9 | const sagaMiddleware = createSagaMiddleware(); 10 | 11 | export default function configureStore(initialState) { 12 | const store = createStore(rootReducer, initialState, composeEnhancers(applyMiddleware(sagaMiddleware))); 13 | 14 | sagaMiddleware.run(rootSaga); 15 | return store; 16 | } 17 | -------------------------------------------------------------------------------- /webui/src/store/effector/cluster.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import { createEvent } from 'effector'; 3 | 4 | import type { Suggestions } from 'src/generated/graphql-typing'; 5 | import type { ClusterPageState } from 'src/store/reducers/clusterPage.reducer'; 6 | 7 | export type ClusterState = $Exact & { 8 | suggestions?: Suggestions, 9 | }; 10 | 11 | export const clusterPageMount = createEvent('cluster page mount'); 12 | export const statsResponseSuccess = createEvent('stats response success'); 13 | export const statsResponseError = createEvent('stats response error'); 14 | -------------------------------------------------------------------------------- /webui/src/store/effector/cluster/events.ts: -------------------------------------------------------------------------------- 1 | import { createEvent } from 'effector'; 2 | 3 | import type { ClusterState } from './types'; 4 | 5 | export const clusterPageMount = createEvent('cluster page mount'); 6 | export const statsResponseSuccess = createEvent('stats response success'); 7 | export const statsResponseError = createEvent('stats response error'); 8 | -------------------------------------------------------------------------------- /webui/src/store/effector/cluster/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export * from './events'; 3 | -------------------------------------------------------------------------------- /webui/src/store/effector/users/index.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import './init'; 3 | export * from './state'; 4 | -------------------------------------------------------------------------------- /webui/src/store/instance.js: -------------------------------------------------------------------------------- 1 | import configureStore from './configureStore'; 2 | 3 | export default configureStore(); 4 | -------------------------------------------------------------------------------- /webui/src/store/request/files.requests.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | import graphql from 'src/api/graphql'; 3 | import type { ConfigSectionInput } from 'src/generated/graphql-typing'; 4 | 5 | import type { FileItem } from '../reducers/files.reducer.js'; 6 | import { getFilesQuery, setFilesMutation, validateFilesQuery } from './queries.graphql'; 7 | 8 | export const applyFiles = (files: Array) => graphql.mutate(setFilesMutation, { files }); 9 | 10 | export const getFiles = () => graphql.fetch(getFilesQuery).then(({ cluster: { config } }) => config); 11 | 12 | export const validateFiles = (sections: ConfigSectionInput[]) => 13 | graphql.fetch(validateFilesQuery, { sections }).then(({ cluster: { validate_config } }) => validate_config); 14 | -------------------------------------------------------------------------------- /webui/src/store/rootSaga.js: -------------------------------------------------------------------------------- 1 | import { all } from 'redux-saga/effects'; 2 | 3 | import { saga as appSaga } from 'src/store/saga/app.saga'; 4 | import { saga as authSaga } from 'src/store/saga/auth.saga'; 5 | import { saga as clusterInstancePageSaga } from 'src/store/saga/clusterInstancePage.saga'; 6 | import { saga as clusterPageSaga } from 'src/store/saga/clusterPage.saga'; 7 | import { saga as editorSaga } from 'src/store/saga/editor.saga'; 8 | import { saga as filesSaga } from 'src/store/saga/files.saga'; 9 | 10 | export default function* rootSaga() { 11 | yield all([appSaga, authSaga, clusterPageSaga, clusterInstancePageSaga, editorSaga, filesSaga].map((saga) => saga())); 12 | } 13 | -------------------------------------------------------------------------------- /webui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tarantool.io/typescript/configs/web", 3 | "include": ["./src"], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "noImplicitAny": false, // TODO: Remove after all migrations (flow -> typescript) 7 | "outDir": "./build", 8 | "sourceMap": true, 9 | "paths": { 10 | "src/*": ["src/*"] 11 | } 12 | } 13 | } 14 | --------------------------------------------------------------------------------