From a9691f5fe78af32c474754f841a71a68e2d2a484 Mon Sep 17 00:00:00 2001 From: Koren Lev Date: Mon, 2 Oct 2017 11:37:03 +0300 Subject: ui move to docker Change-Id: Iff31ebb3fff782e848704801b7800fdf480264a1 Signed-off-by: Koren Lev --- ui/.eslintrc.js | 50 -- ui/.gitignore | 3 - ui/.meteor/.finished-upgraders | 16 - ui/.meteor/.gitignore | 1 - ui/.meteor/.id | 7 - ui/.meteor/packages | 48 -- ui/.meteor/platforms | 2 - ui/.meteor/release | 1 - ui/.meteor/versions | 138 ---- ui/Dockerfile | 2 - ui/app.styl | 34 - ui/build-deploy | 22 - ui/build.sh | 20 - ui/client/accounts-config.js | 11 - ui/client/css/accordionNavMenu.styl | 259 ------- ui/client/css/components.styl | 187 ----- ui/client/css/d3graph.styl | 47 -- ui/client/css/flex.styl | 23 - ui/client/css/header.styl | 118 --- ui/client/css/landing.css | 122 ---- ui/client/css/loading.styl | 19 - ui/client/css/modals.styl | 10 - ui/client/css/plugins.styl | 4 - ui/client/css/wizard.css | 28 - ui/client/main.html | 18 - ui/client/main.js | 10 - ui/client/main.styl | 85 --- ui/client/style/d3plusgraph.css | 14 - ui/client/style/landingpage.css | 138 ---- ui/client/style/multilevelorig.css | 43 -- ui/client/style/threeTest.css | 65 -- ui/client/style/threeTest2.css | 41 -- ui/client/templates/envdialog.html | 131 ---- ui/client/templates/header.html | 13 - ui/client/templates/mainPage.html | 207 ------ ui/contributors.md | 6 - ui/doc/tasks/refactor-tree-node-to-component.md | 13 - ui/howto_build.md | 43 -- ui/imports/api/accounts/methods.js | 203 ------ ui/imports/api/accounts/server/publications.js | 29 - .../attributes_for_hover_on_data.js | 36 - .../api/attributes_for_hover_on_data/methods.js | 8 - .../server/publications.js | 25 - .../api/clique-constraints/clique-constraints.js | 48 -- ui/imports/api/clique-constraints/methods.js | 99 --- .../api/clique-constraints/server/publications.js | 30 - ui/imports/api/clique-types/clique-types.js | 108 --- ui/imports/api/clique-types/methods.js | 108 --- ui/imports/api/clique-types/server/publications.js | 34 - ui/imports/api/cliques/cliques.js | 12 - ui/imports/api/cliques/methods.js | 8 - ui/imports/api/cliques/server/publications.js | 33 - .../api/connection-tests/connection-tests.js | 41 -- ui/imports/api/connection-tests/methods.js | 52 -- .../api/connection-tests/server/publications.js | 21 - ui/imports/api/constants/constants.js | 22 - ui/imports/api/constants/data/distributions.js | 64 -- ui/imports/api/constants/data/env-types.js | 15 - .../constants/data/environment-monitoring-types.js | 12 - .../constants/data/environment-provision-types.js | 21 - ui/imports/api/constants/data/log-levels.js | 27 - ui/imports/api/constants/data/mechanism-drivers.js | 24 - .../api/constants/data/message-source-systems.js | 15 - ui/imports/api/constants/data/network-plugins.js | 15 - .../api/constants/data/object-types-for-links.js | 39 - ui/imports/api/constants/data/scans-statuses.js | 33 - ui/imports/api/constants/data/type-drivers.js | 24 - ui/imports/api/constants/server/publications.js | 16 - .../configuration-groups/aci-configuration.js | 29 - .../configuration-groups/amqp-configuration.js | 29 - .../configuration-groups/cli-configuration.js | 69 -- .../monitoring-configuration.js | 122 ---- .../configuration-groups/mysql-configuration.js | 33 - .../nfv-provider-configuration.js | 25 - .../open-stack-configuration.js | 30 - ui/imports/api/environments/environments.js | 472 ------------ ui/imports/api/environments/methods.js | 157 ---- ui/imports/api/environments/server/publications.js | 102 --- ui/imports/api/inventories/inventories.js | 11 - ui/imports/api/inventories/server/methods.js | 137 ---- ui/imports/api/inventories/server/publications.js | 250 ------- ui/imports/api/link-types/link-types.js | 86 --- ui/imports/api/link-types/methods.js | 114 --- ui/imports/api/link-types/server/publications.js | 46 -- ui/imports/api/links/links.js | 11 - ui/imports/api/links/methods.js | 8 - ui/imports/api/links/server/methods.js | 31 - ui/imports/api/links/server/publications.js | 32 - ui/imports/api/messages/messages.js | 125 ---- ui/imports/api/messages/methods.js | 8 - ui/imports/api/messages/server/methods.js | 49 -- ui/imports/api/messages/server/publications.js | 131 ---- ui/imports/api/migrations/migrations.js | 20 - ui/imports/api/scans/methods.js | 55 -- ui/imports/api/scans/scans.js | 159 ---- ui/imports/api/scans/server/methods.js | 44 -- ui/imports/api/scans/server/publications.js | 82 --- ui/imports/api/scheduled-scans/methods.js | 123 ---- ui/imports/api/scheduled-scans/scheduled-scans.js | 84 --- ui/imports/api/scheduled-scans/server/methods.js | 19 - .../api/scheduled-scans/server/publications.js | 64 -- ui/imports/api/simple-schema.init.js | 13 - ui/imports/api/statistics/helpers.js | 64 -- ui/imports/api/statistics/methods.js | 159 ---- ui/imports/api/statistics/server/publications.js | 52 -- ui/imports/api/statistics/statistics.js | 14 - ui/imports/api/supported_environments/methods.js | 8 - .../supported_environments/server/publications.js | 17 - .../supported_environments.js | 63 -- ui/imports/api/user-settings/methods.js | 39 - .../api/user-settings/server/publications.js | 21 - ui/imports/api/user-settings/user-settings.js | 29 - ui/imports/index.styl | 1 - ui/imports/lib/d3-graph.js | 573 --------------- ui/imports/lib/d3three.js | 789 -------------------- ui/imports/lib/general-regex.js | 15 - ui/imports/lib/icon.js | 14 - ui/imports/lib/images-for-node-type.js | 77 -- ui/imports/lib/regex-utils.js | 11 - ui/imports/lib/simple-schema-utils.js | 15 - ui/imports/lib/utilities.js | 54 -- ui/imports/startup/both/config.js | 9 - ui/imports/startup/both/configs/accounts.js | 9 - ui/imports/startup/both/index.js | 10 - ui/imports/startup/client/index.js | 39 - ui/imports/startup/client/template-helpers.js | 38 - ui/imports/startup/server/config.js | 9 - ui/imports/startup/server/configs/accounts.js | 16 - ui/imports/startup/server/index.js | 13 - ui/imports/startup/server/register-api.js | 63 -- ui/imports/startup/server/seeds.js | 10 - ui/imports/startup/server/seeds/constants.js | 68 -- ui/imports/startup/server/seeds/users.js | 51 -- ui/imports/ui/actions/environment-panel.actions.js | 217 ------ .../ui/actions/graph-tooltip-window.actions.js | 22 - ui/imports/ui/actions/main-app.actions.js | 13 - ui/imports/ui/actions/navigation.js | 76 -- ui/imports/ui/actions/search-interested-parties.js | 85 --- ui/imports/ui/actions/tree-node.actions.js | 136 ---- ui/imports/ui/actions/vedge-info-window.actions.js | 33 - .../accordion-nav-menu/accordion-nav-menu.html | 53 -- .../accordion-nav-menu/accordion-nav-menu.js | 161 ----- .../accordion-nav-menu/accordion-nav-menu.styl | 19 - .../accordion-wiki-menu/accordion-wiki-menu.html | 42 -- .../accordion-wiki-menu/accordion-wiki-menu.js | 147 ---- .../accordionTreeNode/accordion-tree-node.styl | 5 - .../accordionTreeNode/accordionTreeNode.html | 54 -- .../accordionTreeNode/accordionTreeNode.js | 284 -------- .../accordionTreeNodeChildren.html | 19 - .../accordionTreeNodeChildren.js | 125 ---- .../aggregate-dashboard/aggregate-dashboard.html | 35 - .../aggregate-dashboard/aggregate-dashboard.js | 212 ------ .../aggregate-dashboard/aggregate-dashboard.styl | 10 - .../ui/components/alarm-icons/alarm-icons.html | 85 --- .../ui/components/alarm-icons/alarm-icons.js | 78 -- .../ui/components/alarm-icons/alarm-icons.styl | 1 - .../auto-search-result-line.html | 16 - .../auto-search-result-line.js | 51 -- .../auto-search-result-line.styl | 23 - .../ui/components/breadcrumb/breadcrumb.html | 17 - ui/imports/ui/components/breadcrumb/breadcrumb.js | 83 --- .../ui/components/breadcrumb/breadcrumb.styl | 3 - .../components/breadcrumbNode/breadcrumbNode.html | 15 - .../ui/components/breadcrumbNode/breadcrumbNode.js | 43 -- .../components/breadcrumbNode/breadcrumbNode.styl | 4 - .../clique-constraint/clique-constraint.html | 96 --- .../clique-constraint/clique-constraint.js | 329 --------- .../clique-constraint/clique-constraint.styl | 35 - .../clique-constraints-list.html | 52 -- .../clique-constraints-list.js | 77 -- .../clique-constraints-list.styl | 22 - .../ui/components/clique-type/clique-type.html | 100 --- .../ui/components/clique-type/clique-type.js | 375 ---------- .../ui/components/clique-type/clique-type.styl | 54 -- .../clique-types-list/clique-types-list.html | 56 -- .../clique-types-list/clique-types-list.js | 82 --- .../clique-types-list/clique-types-list.styl | 22 - ui/imports/ui/components/d3graph/d3graph.html | 13 - ui/imports/ui/components/d3graph/d3graph.js | 126 ---- ui/imports/ui/components/d3graph/d3graph.styl | 12 - ui/imports/ui/components/dashboard/dashboard.html | 62 -- ui/imports/ui/components/dashboard/dashboard.js | 273 ------- ui/imports/ui/components/dashboard/dashboard.styl | 40 - .../ui/components/data-cubic/data-cubic.html | 23 - ui/imports/ui/components/data-cubic/data-cubic.js | 71 -- .../ui/components/data-cubic/data-cubic.styl | 27 - .../detailed-node-info-box.html | 58 -- .../detailed-node-info-box.js | 57 -- .../detailed-node-info-box.styl | 41 -- .../ui/components/env-aci-info/env-aci-info.html | 88 --- .../ui/components/env-aci-info/env-aci-info.js | 65 -- .../env-amqp-credentials-info.html | 108 --- .../env-amqp-credentials-info.js | 56 -- .../env-delete-modal/env-delete-modal.html | 48 -- .../env-delete-modal/env-delete-modal.js | 55 -- .../env-delete-modal/env-delete-modal.styl | 2 - ui/imports/ui/components/env-form/env-form.html | 37 - ui/imports/ui/components/env-form/env-form.js | 94 --- ui/imports/ui/components/env-form/env-form.styl | 0 .../ui/components/env-main-info/env-main-info.html | 213 ------ .../ui/components/env-main-info/env-main-info.js | 133 ---- .../env-master-host-credentials-info.html | 109 --- .../env-master-host-credentials-info.js | 56 -- .../env-monitoring-info/env-monitoring-info.html | 290 -------- .../env-monitoring-info/env-monitoring-info.js | 79 -- .../ui/components/env-nfv-info/env-nfv-info.html | 128 ---- .../ui/components/env-nfv-info/env-nfv-info.js | 67 -- .../env-open-stack-db-credentials-info.html | 109 --- .../env-open-stack-db-credentials-info.js | 56 -- .../env-os-api-endpoint-info.html | 125 ---- .../env-os-api-endpoint-info.js | 56 -- .../environment-box/environment-box.html | 112 --- .../components/environment-box/environment-box.js | 37 - .../environment-box/environment-box.styl | 18 - .../environment-dashboard.html | 59 -- .../environment-dashboard/environment-dashboard.js | 408 ----------- .../environment-dashboard.styl | 12 - .../environment-wizard/environment-wizard.html | 83 --- .../environment-wizard/environment-wizard.js | 568 --------------- .../environment-wizard/environment-wizard.styl | 27 - .../ui/components/environment/environment.html | 70 -- .../ui/components/environment/environment.js | 604 ---------------- .../ui/components/environment/environment.styl | 70 -- .../ui/components/flow-graph/flow-graph.html | 17 - ui/imports/ui/components/flow-graph/flow-graph.js | 383 ---------- .../ui/components/flow-graph/flow-graph.styl | 18 - .../general-folder-node-dashboard.html | 24 - .../general-folder-node-dashboard.js | 112 --- .../general-folder-node-dashboard.styl | 12 - .../general-node-dashboard.html | 17 - .../general-node-dashboard.js | 84 --- .../general-node-dashboard.styl | 6 - .../general-node-info-box.html | 37 - .../general-node-info-box/general-node-info-box.js | 63 -- .../general-node-info-box.styl | 33 - .../ui/components/get-started/get-started.html | 412 ----------- .../ui/components/get-started/get-started.js | 32 - .../graph-tooltip-window/graph-tooltip-window.html | 17 - .../graph-tooltip-window/graph-tooltip-window.js | 84 --- .../graph-tooltip-window/graph-tooltip-window.styl | 28 - .../components/host-dashboard/host-dashboard.html | 29 - .../ui/components/host-dashboard/host-dashboard.js | 197 ----- .../components/host-dashboard/host-dashboard.styl | 6 - ui/imports/ui/components/icon/icon.html | 18 - ui/imports/ui/components/icon/icon.js | 48 -- ui/imports/ui/components/icon/icon.styl | 2 - ui/imports/ui/components/index.styl | 59 -- .../ui/components/input-model/input-model.html | 21 - .../ui/components/input-model/input-model.js | 116 --- .../inventory-properties-display.html | 13 - .../inventory-properties-display.js | 90 --- .../inventory-properties-display.styl | 2 - ui/imports/ui/components/landing/landing.html | 201 ------ ui/imports/ui/components/landing/landing.js | 35 - ui/imports/ui/components/landing/landing.styl | 80 -- ui/imports/ui/components/link-type/link-type.html | 88 --- ui/imports/ui/components/link-type/link-type.js | 328 --------- ui/imports/ui/components/link-type/link-type.styl | 34 - .../link-types-list/link-types-list.html | 56 -- .../components/link-types-list/link-types-list.js | 87 --- .../link-types-list/link-types-list.styl | 23 - .../ui/components/list-info-box/list-info-box.html | 60 -- .../ui/components/list-info-box/list-info-box.js | 111 --- .../ui/components/list-info-box/list-info-box.styl | 4 - ui/imports/ui/components/loading/loading.html | 12 - ui/imports/ui/components/loading/loading.js | 30 - ui/imports/ui/components/loading/loading.styl | 0 ui/imports/ui/components/main/main.html | 15 - ui/imports/ui/components/main/main.js | 98 --- ui/imports/ui/components/main/main.styl | 0 ui/imports/ui/components/message/message.html | 168 ----- ui/imports/ui/components/message/message.js | 252 ------- ui/imports/ui/components/message/message.styl | 41 -- .../messages-info-box/messages-info-box.html | 27 - .../messages-info-box/messages-info-box.js | 66 -- .../messages-info-box/messages-info-box.styl | 0 .../ui/components/messages-list/messages-list.html | 103 --- .../ui/components/messages-list/messages-list.js | 291 -------- .../ui/components/messages-list/messages-list.styl | 37 - .../components/messages-modal/messages-modal.html | 78 -- .../ui/components/messages-modal/messages-modal.js | 285 -------- .../components/messages-modal/messages-modal.styl | 18 - ui/imports/ui/components/mt-input/mt-input.html | 7 - ui/imports/ui/components/mt-input/mt-input.js | 106 --- ui/imports/ui/components/mt-input/mt-input.styl | 2 - ui/imports/ui/components/mt-radios/mt-radios.html | 22 - ui/imports/ui/components/mt-radios/mt-radios.js | 62 -- ui/imports/ui/components/mt-radios/mt-radios.styl | 2 - ui/imports/ui/components/mt-select/mt-select.html | 13 - ui/imports/ui/components/mt-select/mt-select.js | 91 --- ui/imports/ui/components/mt-select/mt-select.styl | 2 - .../network-graph-manager.html | 5 - .../network-graph-manager/network-graph-manager.js | 436 ----------- .../network-graph-manager.styl | 2 - .../ui/components/network-graph/network-graph.html | 7 - .../ui/components/network-graph/network-graph.js | 803 --------------------- .../ui/components/network-graph/network-graph.styl | 25 - .../network-info-box/network-info-box.html | 38 - .../network-info-box/network-info-box.js | 69 -- .../network-info-box/network-info-box.styl | 2 - .../ui/components/new-scanning/new-scanning.html | 53 -- .../ui/components/new-scanning/new-scanning.js | 80 -- .../ui/components/new-scanning/new-scanning.styl | 7 - ui/imports/ui/components/pager/pager.html | 42 -- ui/imports/ui/components/pager/pager.js | 123 ---- ui/imports/ui/components/pager/pager.styl | 4 - .../project-dashboard/project-dashboard.html | 38 - .../project-dashboard/project-dashboard.js | 149 ---- .../project-dashboard/project-dashboard.styl | 14 - .../region-dashboard/region-dashboard.html | 38 - .../region-dashboard/region-dashboard.js | 220 ------ .../region-dashboard/region-dashboard.styl | 14 - .../scanning-request/scanning-request.html | 75 -- .../scanning-request/scanning-request.js | 383 ---------- .../scanning-request/scanning-request.styl | 7 - .../ui/components/scans-list/scans-list.html | 86 --- ui/imports/ui/components/scans-list/scans-list.js | 224 ------ .../ui/components/scans-list/scans-list.styl | 33 - .../components/scheduled-scan/scheduled-scan.html | 117 --- .../ui/components/scheduled-scan/scheduled-scan.js | 515 ------------- .../components/scheduled-scan/scheduled-scan.styl | 34 - .../scheduled-scans-list/scheduled-scans-list.html | 72 -- .../scheduled-scans-list/scheduled-scans-list.js | 198 ----- .../scheduled-scans-list/scheduled-scans-list.styl | 33 - .../search-auto-complete-list.html | 22 - .../search-auto-complete-list.js | 167 ----- .../search-auto-complete.styl | 28 - .../ui/components/select-model/select-model.html | 23 - .../ui/components/select-model/select-model.js | 79 -- .../selectable-ordered-input.html | 29 - .../selectable-ordered-input.js | 235 ------ .../selectable-ordered-input.styl | 30 - .../time-selection-widget.html | 33 - .../time-selection-widget/time-selection-widget.js | 45 -- .../time-selection-widget.styl | 5 - .../top-navbar-menu/top-navbar-menu.html | 59 -- .../components/top-navbar-menu/top-navbar-menu.js | 129 ---- .../top-navbar-menu/top-navbar-menu.styl | 23 - ui/imports/ui/components/tree-node/tree-node.html | 58 -- ui/imports/ui/components/tree-node/tree-node.js | 419 ----------- ui/imports/ui/components/tree-node/tree-node.styl | 53 -- ui/imports/ui/components/user-list/user-list.html | 53 -- ui/imports/ui/components/user-list/user-list.js | 74 -- ui/imports/ui/components/user-list/user-list.styl | 22 - .../ui/components/user-settings/user-settings.html | 35 - .../ui/components/user-settings/user-settings.js | 123 ---- .../ui/components/user-settings/user-settings.styl | 45 -- ui/imports/ui/components/user/user.html | 111 --- ui/imports/ui/components/user/user.js | 366 ---------- ui/imports/ui/components/user/user.styl | 34 - .../vedge-info-window/vedge-info-window.html | 114 --- .../vedge-info-window/vedge-info-window.js | 380 ---------- .../vedge-info-window/vedge-info-window.styl | 43 -- .../components/zone-dashboard/zone-dashboard.html | 35 - .../ui/components/zone-dashboard/zone-dashboard.js | 214 ------ .../components/zone-dashboard/zone-dashboard.styl | 10 - ui/imports/ui/index.styl | 1 - .../ui/lib/environment-tree-node-behavior.js | 38 - ui/imports/ui/lib/input-model.js | 23 - ui/imports/ui/lib/inventory-tree-node-behavior.js | 58 -- ui/imports/ui/lib/select-model.js | 23 - .../ui/reducers/environment-panel.reducer.js | 186 ----- .../ui/reducers/graph-tooltip-window.reducer.js | 40 - ui/imports/ui/reducers/i18n.reducer.js | 172 ----- ui/imports/ui/reducers/index.js | 25 - ui/imports/ui/reducers/main-app.reducer.js | 20 - ui/imports/ui/reducers/navigation.js | 91 --- .../ui/reducers/search-interested-parties.js | 68 -- ui/imports/ui/reducers/tree-node.reducer.js | 224 ------ .../ui/reducers/vedge-info-window.reducer.js | 42 -- ui/imports/ui/store/index.js | 3 - ui/imports/ui/store/store.js | 17 - ui/lib/router.js | 372 ---------- ui/osdna.js | 9 - ui/package-source.sh | 23 - ui/package.json | 26 - .../backup - ic_cloud_queue_black_48dp_2x.png | Bin 9845 -> 0 bytes ui/public/cisco-favicon.ico | Bin 38692 -> 0 bytes ui/public/cisco-logo-load.png | Bin 4214 -> 0 bytes ui/public/dna-718905_600.png | Bin 17620 -> 0 bytes ui/public/get-started/dashboard-notifications.png | Bin 10832 -> 0 bytes ui/public/get-started/env-dashboard.png | Bin 46839 -> 0 bytes ui/public/get-started/env-delete-action.png | Bin 81457 -> 0 bytes .../get-started/env-diting-os-db-credentails.png | Bin 65797 -> 0 bytes ui/public/get-started/env-edit-action.png | Bin 81503 -> 0 bytes .../get-started/env-editing-amqp-credentials.png | Bin 64211 -> 0 bytes .../env-editing-master-host-credentials.png | Bin 71760 -> 0 bytes ui/public/get-started/env-editing-monitoring.png | Bin 117008 -> 0 bytes ui/public/get-started/env-editing-os-end-point.png | Bin 45236 -> 0 bytes ui/public/get-started/env-editing-provision.png | Bin 9517 -> 0 bytes ui/public/get-started/env-editing.png | Bin 75945 -> 0 bytes ui/public/get-started/environments-pick.png | Bin 92013 -> 0 bytes ui/public/get-started/main-screen-explained.png | Bin 195772 -> 0 bytes ui/public/get-started/navbar-explained.png | Bin 181291 -> 0 bytes ui/public/get-started/new-environment-action.png | Bin 72093 -> 0 bytes ui/public/get-started/scan-action.png | Bin 81481 -> 0 bytes ui/public/get-started/scan-request-screen.png | Bin 25126 -> 0 bytes ui/public/get-started/selecting-dashboard.png | Bin 91003 -> 0 bytes ui/public/get-started/selecting-env.png | Bin 7762 -> 0 bytes ui/public/get-started/setting-action.png | Bin 34477 -> 0 bytes ui/public/get-started/setting-scans-action.png | Bin 125195 -> 0 bytes ui/public/ic_cloud_queue_black_48dp_2x-green.png | Bin 11727 -> 0 bytes ui/public/ic_cloud_queue_black_48dp_2x-orange.png | Bin 9811 -> 0 bytes ui/public/ic_cloud_queue_black_48dp_2x-red.png | Bin 11334 -> 0 bytes ui/public/ic_cloud_queue_black_48dp_2x.png | Bin 9845 -> 0 bytes ui/public/ic_computer_black_48dp_2x-green.png | Bin 5357 -> 0 bytes ui/public/ic_computer_black_48dp_2x-orange.png | Bin 4628 -> 0 bytes ui/public/ic_computer_black_48dp_2x-red.png | Bin 5315 -> 0 bytes ui/public/ic_computer_black_48dp_2x.png | Bin 3365 -> 0 bytes ui/public/ic_device_hub_black_24dp_2x-green.png | Bin 1464 -> 0 bytes ui/public/ic_device_hub_black_24dp_2x-orange.png | Bin 1471 -> 0 bytes ui/public/ic_device_hub_black_24dp_2x-red.png | Bin 1455 -> 0 bytes ui/public/ic_device_hub_black_24dp_2x.png | Bin 1164 -> 0 bytes ui/public/ic_dns_black_48dp_2x-green.png | Bin 8043 -> 0 bytes ui/public/ic_dns_black_48dp_2x-orange.png | Bin 7033 -> 0 bytes ui/public/ic_dns_black_48dp_2x-red.png | Bin 7900 -> 0 bytes ui/public/ic_dns_black_48dp_2x.png | Bin 8044 -> 0 bytes ui/public/ic_gamepad_black_48dp_2x-green.png | Bin 7635 -> 0 bytes ui/public/ic_gamepad_black_48dp_2x-orange.png | Bin 6807 -> 0 bytes ui/public/ic_gamepad_black_48dp_2x-red.png | Bin 7522 -> 0 bytes ui/public/ic_gamepad_black_48dp_2x.png | Bin 5647 -> 0 bytes .../ic_keyboard_return_black_48dp_2x-green.png | Bin 8306 -> 0 bytes .../ic_keyboard_return_black_48dp_2x-orange.png | Bin 7176 -> 0 bytes ui/public/ic_keyboard_return_black_48dp_2x-red.png | Bin 7963 -> 0 bytes ui/public/ic_keyboard_return_black_48dp_2x.png | Bin 5438 -> 0 bytes ui/public/ic_lens_black_48dp_2x-green.png | Bin 9527 -> 0 bytes ui/public/ic_lens_black_48dp_2x-orange.png | Bin 8058 -> 0 bytes ui/public/ic_lens_black_48dp_2x-red.png | Bin 9336 -> 0 bytes ui/public/ic_lens_black_48dp_2x.png | Bin 8523 -> 0 bytes ...ettings_input_composite_black_48dp_2x-green.png | Bin 7053 -> 0 bytes ...ttings_input_composite_black_48dp_2x-orange.png | Bin 6230 -> 0 bytes ..._settings_input_composite_black_48dp_2x-red.png | Bin 6984 -> 0 bytes .../ic_settings_input_composite_black_48dp_2x.png | Bin 5389 -> 0 bytes .../ic_settings_input_hdmi_black_48dp_2x-green.png | Bin 7507 -> 0 bytes ...ic_settings_input_hdmi_black_48dp_2x-orange.png | Bin 6597 -> 0 bytes .../ic_settings_input_hdmi_black_48dp_2x-red.png | Bin 7463 -> 0 bytes ui/public/ic_settings_input_hdmi_black_48dp_2x.png | Bin 5881 -> 0 bytes ui/public/ic_storage_black_48dp_2x-green.png | Bin 6732 -> 0 bytes ui/public/ic_storage_black_48dp_2x-orange.png | Bin 5958 -> 0 bytes ui/public/ic_storage_black_48dp_2x-red.png | Bin 6634 -> 0 bytes ui/public/ic_storage_black_48dp_2x.png | Bin 4804 -> 0 bytes ui/public/ic_tv_black_24dp_2x.png | Bin 1011 -> 0 bytes ui/public/ic_zoom_out_map_black_24dp_2x.png | Bin 1219 -> 0 bytes ui/public/images/calipso-logo.jpg | Bin 2895 -> 0 bytes ui/public/instance.png | Bin 1191 -> 0 bytes ui/public/landing/calipso-logo.png | Bin 22270 -> 0 bytes ui/public/landing/docker.png | Bin 11495 -> 0 bytes ui/public/landing/eye.png | Bin 33084 -> 0 bytes ui/public/landing/first.png | Bin 47856 -> 0 bytes ui/public/landing/graph.png | Bin 69443 -> 0 bytes ui/public/landing/main-screen.png | Bin 48337 -> 0 bytes ui/public/landing/openstack.png | Bin 8286 -> 0 bytes ui/public/logo-cisco-png.png | Bin 23417 -> 0 bytes ui/public/logo-cisco.svg | 37 - ui/public/logo_microscope_3.png | Bin 17774 -> 0 bytes ui/public/network.png | Bin 2506 -> 0 bytes .../ic_device_hub_black_24dp_2x-green.png | Bin 273 -> 0 bytes .../ic_device_hub_black_24dp_2x-orange.png | Bin 268 -> 0 bytes .../ic_device_hub_black_24dp_2x-red.png | Bin 273 -> 0 bytes .../old-2017-09-25/ic_device_hub_black_24dp_2x.png | Bin 392 -> 0 bytes .../ic_tv_black_24dp_2x-old-2017-09-25.png | Bin 188 -> 0 bytes ...c_zoom_out_map_black_24dp_2x-old-2017-09-25.png | Bin 326 -> 0 bytes ui/public/particle.png | Bin 2924 -> 0 bytes ui/public/pnic.jpg | Bin 37828 -> 0 bytes ui/public/vconnector.png | Bin 3464 -> 0 bytes ui/public/vnic.png | Bin 4520 -> 0 bytes ui/public/vservice.png | Bin 4431 -> 0 bytes ui/public/wiki/addNewEnv.png | Bin 105144 -> 0 bytes ui/public/wiki/addNewEnv1.png | Bin 160919 -> 0 bytes ui/public/wiki/wizard1.png | Bin 46714 -> 0 bytes ui/public/wiki/wizard2.png | Bin 53414 -> 0 bytes ui/public/wiki/wizard3.png | Bin 62210 -> 0 bytes ui/public/wiki/wizard4.png | Bin 54438 -> 0 bytes ui/readme.md | 43 -- ui/run | 3 - ui/run-dev.sh | 10 - ui/server/main.js | 10 - 477 files changed, 30174 deletions(-) delete mode 100644 ui/.eslintrc.js delete mode 100644 ui/.gitignore delete mode 100644 ui/.meteor/.finished-upgraders delete mode 100644 ui/.meteor/.gitignore delete mode 100644 ui/.meteor/.id delete mode 100644 ui/.meteor/packages delete mode 100644 ui/.meteor/platforms delete mode 100644 ui/.meteor/release delete mode 100644 ui/.meteor/versions delete mode 100644 ui/Dockerfile delete mode 100644 ui/app.styl delete mode 100755 ui/build-deploy delete mode 100755 ui/build.sh delete mode 100644 ui/client/accounts-config.js delete mode 100644 ui/client/css/accordionNavMenu.styl delete mode 100644 ui/client/css/components.styl delete mode 100644 ui/client/css/d3graph.styl delete mode 100644 ui/client/css/flex.styl delete mode 100644 ui/client/css/header.styl delete mode 100644 ui/client/css/landing.css delete mode 100644 ui/client/css/loading.styl delete mode 100644 ui/client/css/modals.styl delete mode 100644 ui/client/css/plugins.styl delete mode 100644 ui/client/css/wizard.css delete mode 100644 ui/client/main.html delete mode 100644 ui/client/main.js delete mode 100644 ui/client/main.styl delete mode 100644 ui/client/style/d3plusgraph.css delete mode 100644 ui/client/style/landingpage.css delete mode 100644 ui/client/style/multilevelorig.css delete mode 100644 ui/client/style/threeTest.css delete mode 100644 ui/client/style/threeTest2.css delete mode 100644 ui/client/templates/envdialog.html delete mode 100644 ui/client/templates/header.html delete mode 100644 ui/client/templates/mainPage.html delete mode 100644 ui/contributors.md delete mode 100644 ui/doc/tasks/refactor-tree-node-to-component.md delete mode 100644 ui/howto_build.md delete mode 100644 ui/imports/api/accounts/methods.js delete mode 100644 ui/imports/api/accounts/server/publications.js delete mode 100644 ui/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data.js delete mode 100644 ui/imports/api/attributes_for_hover_on_data/methods.js delete mode 100644 ui/imports/api/attributes_for_hover_on_data/server/publications.js delete mode 100644 ui/imports/api/clique-constraints/clique-constraints.js delete mode 100644 ui/imports/api/clique-constraints/methods.js delete mode 100644 ui/imports/api/clique-constraints/server/publications.js delete mode 100644 ui/imports/api/clique-types/clique-types.js delete mode 100644 ui/imports/api/clique-types/methods.js delete mode 100644 ui/imports/api/clique-types/server/publications.js delete mode 100644 ui/imports/api/cliques/cliques.js delete mode 100644 ui/imports/api/cliques/methods.js delete mode 100644 ui/imports/api/cliques/server/publications.js delete mode 100644 ui/imports/api/connection-tests/connection-tests.js delete mode 100644 ui/imports/api/connection-tests/methods.js delete mode 100644 ui/imports/api/connection-tests/server/publications.js delete mode 100644 ui/imports/api/constants/constants.js delete mode 100644 ui/imports/api/constants/data/distributions.js delete mode 100644 ui/imports/api/constants/data/env-types.js delete mode 100644 ui/imports/api/constants/data/environment-monitoring-types.js delete mode 100644 ui/imports/api/constants/data/environment-provision-types.js delete mode 100644 ui/imports/api/constants/data/log-levels.js delete mode 100644 ui/imports/api/constants/data/mechanism-drivers.js delete mode 100644 ui/imports/api/constants/data/message-source-systems.js delete mode 100644 ui/imports/api/constants/data/network-plugins.js delete mode 100644 ui/imports/api/constants/data/object-types-for-links.js delete mode 100644 ui/imports/api/constants/data/scans-statuses.js delete mode 100644 ui/imports/api/constants/data/type-drivers.js delete mode 100644 ui/imports/api/constants/server/publications.js delete mode 100644 ui/imports/api/environments/configuration-groups/aci-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/amqp-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/cli-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/monitoring-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/mysql-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/nfv-provider-configuration.js delete mode 100644 ui/imports/api/environments/configuration-groups/open-stack-configuration.js delete mode 100644 ui/imports/api/environments/environments.js delete mode 100644 ui/imports/api/environments/methods.js delete mode 100644 ui/imports/api/environments/server/publications.js delete mode 100644 ui/imports/api/inventories/inventories.js delete mode 100644 ui/imports/api/inventories/server/methods.js delete mode 100644 ui/imports/api/inventories/server/publications.js delete mode 100644 ui/imports/api/link-types/link-types.js delete mode 100644 ui/imports/api/link-types/methods.js delete mode 100644 ui/imports/api/link-types/server/publications.js delete mode 100644 ui/imports/api/links/links.js delete mode 100644 ui/imports/api/links/methods.js delete mode 100644 ui/imports/api/links/server/methods.js delete mode 100644 ui/imports/api/links/server/publications.js delete mode 100644 ui/imports/api/messages/messages.js delete mode 100644 ui/imports/api/messages/methods.js delete mode 100644 ui/imports/api/messages/server/methods.js delete mode 100644 ui/imports/api/messages/server/publications.js delete mode 100644 ui/imports/api/migrations/migrations.js delete mode 100644 ui/imports/api/scans/methods.js delete mode 100644 ui/imports/api/scans/scans.js delete mode 100644 ui/imports/api/scans/server/methods.js delete mode 100644 ui/imports/api/scans/server/publications.js delete mode 100644 ui/imports/api/scheduled-scans/methods.js delete mode 100644 ui/imports/api/scheduled-scans/scheduled-scans.js delete mode 100644 ui/imports/api/scheduled-scans/server/methods.js delete mode 100644 ui/imports/api/scheduled-scans/server/publications.js delete mode 100644 ui/imports/api/simple-schema.init.js delete mode 100644 ui/imports/api/statistics/helpers.js delete mode 100644 ui/imports/api/statistics/methods.js delete mode 100644 ui/imports/api/statistics/server/publications.js delete mode 100644 ui/imports/api/statistics/statistics.js delete mode 100644 ui/imports/api/supported_environments/methods.js delete mode 100644 ui/imports/api/supported_environments/server/publications.js delete mode 100644 ui/imports/api/supported_environments/supported_environments.js delete mode 100644 ui/imports/api/user-settings/methods.js delete mode 100644 ui/imports/api/user-settings/server/publications.js delete mode 100644 ui/imports/api/user-settings/user-settings.js delete mode 100644 ui/imports/index.styl delete mode 100644 ui/imports/lib/d3-graph.js delete mode 100644 ui/imports/lib/d3three.js delete mode 100644 ui/imports/lib/general-regex.js delete mode 100644 ui/imports/lib/icon.js delete mode 100644 ui/imports/lib/images-for-node-type.js delete mode 100644 ui/imports/lib/regex-utils.js delete mode 100644 ui/imports/lib/simple-schema-utils.js delete mode 100644 ui/imports/lib/utilities.js delete mode 100644 ui/imports/startup/both/config.js delete mode 100644 ui/imports/startup/both/configs/accounts.js delete mode 100644 ui/imports/startup/both/index.js delete mode 100644 ui/imports/startup/client/index.js delete mode 100644 ui/imports/startup/client/template-helpers.js delete mode 100644 ui/imports/startup/server/config.js delete mode 100644 ui/imports/startup/server/configs/accounts.js delete mode 100644 ui/imports/startup/server/index.js delete mode 100644 ui/imports/startup/server/register-api.js delete mode 100644 ui/imports/startup/server/seeds.js delete mode 100644 ui/imports/startup/server/seeds/constants.js delete mode 100644 ui/imports/startup/server/seeds/users.js delete mode 100644 ui/imports/ui/actions/environment-panel.actions.js delete mode 100644 ui/imports/ui/actions/graph-tooltip-window.actions.js delete mode 100644 ui/imports/ui/actions/main-app.actions.js delete mode 100644 ui/imports/ui/actions/navigation.js delete mode 100644 ui/imports/ui/actions/search-interested-parties.js delete mode 100644 ui/imports/ui/actions/tree-node.actions.js delete mode 100644 ui/imports/ui/actions/vedge-info-window.actions.js delete mode 100644 ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.html delete mode 100644 ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.js delete mode 100644 ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.styl delete mode 100644 ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.html delete mode 100644 ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.js delete mode 100644 ui/imports/ui/components/accordionTreeNode/accordion-tree-node.styl delete mode 100644 ui/imports/ui/components/accordionTreeNode/accordionTreeNode.html delete mode 100644 ui/imports/ui/components/accordionTreeNode/accordionTreeNode.js delete mode 100644 ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.html delete mode 100644 ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.js delete mode 100644 ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.html delete mode 100644 ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.js delete mode 100644 ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.styl delete mode 100644 ui/imports/ui/components/alarm-icons/alarm-icons.html delete mode 100644 ui/imports/ui/components/alarm-icons/alarm-icons.js delete mode 100644 ui/imports/ui/components/alarm-icons/alarm-icons.styl delete mode 100644 ui/imports/ui/components/auto-search-result-line/auto-search-result-line.html delete mode 100644 ui/imports/ui/components/auto-search-result-line/auto-search-result-line.js delete mode 100644 ui/imports/ui/components/auto-search-result-line/auto-search-result-line.styl delete mode 100644 ui/imports/ui/components/breadcrumb/breadcrumb.html delete mode 100644 ui/imports/ui/components/breadcrumb/breadcrumb.js delete mode 100644 ui/imports/ui/components/breadcrumb/breadcrumb.styl delete mode 100644 ui/imports/ui/components/breadcrumbNode/breadcrumbNode.html delete mode 100644 ui/imports/ui/components/breadcrumbNode/breadcrumbNode.js delete mode 100644 ui/imports/ui/components/breadcrumbNode/breadcrumbNode.styl delete mode 100644 ui/imports/ui/components/clique-constraint/clique-constraint.html delete mode 100644 ui/imports/ui/components/clique-constraint/clique-constraint.js delete mode 100644 ui/imports/ui/components/clique-constraint/clique-constraint.styl delete mode 100644 ui/imports/ui/components/clique-constraints-list/clique-constraints-list.html delete mode 100644 ui/imports/ui/components/clique-constraints-list/clique-constraints-list.js delete mode 100644 ui/imports/ui/components/clique-constraints-list/clique-constraints-list.styl delete mode 100644 ui/imports/ui/components/clique-type/clique-type.html delete mode 100644 ui/imports/ui/components/clique-type/clique-type.js delete mode 100644 ui/imports/ui/components/clique-type/clique-type.styl delete mode 100644 ui/imports/ui/components/clique-types-list/clique-types-list.html delete mode 100644 ui/imports/ui/components/clique-types-list/clique-types-list.js delete mode 100644 ui/imports/ui/components/clique-types-list/clique-types-list.styl delete mode 100644 ui/imports/ui/components/d3graph/d3graph.html delete mode 100644 ui/imports/ui/components/d3graph/d3graph.js delete mode 100644 ui/imports/ui/components/d3graph/d3graph.styl delete mode 100644 ui/imports/ui/components/dashboard/dashboard.html delete mode 100644 ui/imports/ui/components/dashboard/dashboard.js delete mode 100644 ui/imports/ui/components/dashboard/dashboard.styl delete mode 100644 ui/imports/ui/components/data-cubic/data-cubic.html delete mode 100644 ui/imports/ui/components/data-cubic/data-cubic.js delete mode 100644 ui/imports/ui/components/data-cubic/data-cubic.styl delete mode 100644 ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.html delete mode 100644 ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.js delete mode 100644 ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.styl delete mode 100644 ui/imports/ui/components/env-aci-info/env-aci-info.html delete mode 100644 ui/imports/ui/components/env-aci-info/env-aci-info.js delete mode 100644 ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.html delete mode 100644 ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.js delete mode 100644 ui/imports/ui/components/env-delete-modal/env-delete-modal.html delete mode 100644 ui/imports/ui/components/env-delete-modal/env-delete-modal.js delete mode 100644 ui/imports/ui/components/env-delete-modal/env-delete-modal.styl delete mode 100644 ui/imports/ui/components/env-form/env-form.html delete mode 100644 ui/imports/ui/components/env-form/env-form.js delete mode 100644 ui/imports/ui/components/env-form/env-form.styl delete mode 100644 ui/imports/ui/components/env-main-info/env-main-info.html delete mode 100644 ui/imports/ui/components/env-main-info/env-main-info.js delete mode 100644 ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.html delete mode 100644 ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.js delete mode 100644 ui/imports/ui/components/env-monitoring-info/env-monitoring-info.html delete mode 100644 ui/imports/ui/components/env-monitoring-info/env-monitoring-info.js delete mode 100644 ui/imports/ui/components/env-nfv-info/env-nfv-info.html delete mode 100644 ui/imports/ui/components/env-nfv-info/env-nfv-info.js delete mode 100644 ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.html delete mode 100644 ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.js delete mode 100644 ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.html delete mode 100644 ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.js delete mode 100644 ui/imports/ui/components/environment-box/environment-box.html delete mode 100644 ui/imports/ui/components/environment-box/environment-box.js delete mode 100644 ui/imports/ui/components/environment-box/environment-box.styl delete mode 100644 ui/imports/ui/components/environment-dashboard/environment-dashboard.html delete mode 100644 ui/imports/ui/components/environment-dashboard/environment-dashboard.js delete mode 100644 ui/imports/ui/components/environment-dashboard/environment-dashboard.styl delete mode 100644 ui/imports/ui/components/environment-wizard/environment-wizard.html delete mode 100644 ui/imports/ui/components/environment-wizard/environment-wizard.js delete mode 100644 ui/imports/ui/components/environment-wizard/environment-wizard.styl delete mode 100644 ui/imports/ui/components/environment/environment.html delete mode 100644 ui/imports/ui/components/environment/environment.js delete mode 100644 ui/imports/ui/components/environment/environment.styl delete mode 100644 ui/imports/ui/components/flow-graph/flow-graph.html delete mode 100644 ui/imports/ui/components/flow-graph/flow-graph.js delete mode 100644 ui/imports/ui/components/flow-graph/flow-graph.styl delete mode 100644 ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.html delete mode 100644 ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.js delete mode 100644 ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.styl delete mode 100644 ui/imports/ui/components/general-node-dashboard/general-node-dashboard.html delete mode 100644 ui/imports/ui/components/general-node-dashboard/general-node-dashboard.js delete mode 100644 ui/imports/ui/components/general-node-dashboard/general-node-dashboard.styl delete mode 100644 ui/imports/ui/components/general-node-info-box/general-node-info-box.html delete mode 100644 ui/imports/ui/components/general-node-info-box/general-node-info-box.js delete mode 100644 ui/imports/ui/components/general-node-info-box/general-node-info-box.styl delete mode 100644 ui/imports/ui/components/get-started/get-started.html delete mode 100644 ui/imports/ui/components/get-started/get-started.js delete mode 100644 ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html delete mode 100644 ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.js delete mode 100644 ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.styl delete mode 100644 ui/imports/ui/components/host-dashboard/host-dashboard.html delete mode 100644 ui/imports/ui/components/host-dashboard/host-dashboard.js delete mode 100644 ui/imports/ui/components/host-dashboard/host-dashboard.styl delete mode 100644 ui/imports/ui/components/icon/icon.html delete mode 100644 ui/imports/ui/components/icon/icon.js delete mode 100644 ui/imports/ui/components/icon/icon.styl delete mode 100644 ui/imports/ui/components/index.styl delete mode 100644 ui/imports/ui/components/input-model/input-model.html delete mode 100644 ui/imports/ui/components/input-model/input-model.js delete mode 100644 ui/imports/ui/components/inventory-properties-display/inventory-properties-display.html delete mode 100644 ui/imports/ui/components/inventory-properties-display/inventory-properties-display.js delete mode 100644 ui/imports/ui/components/inventory-properties-display/inventory-properties-display.styl delete mode 100644 ui/imports/ui/components/landing/landing.html delete mode 100644 ui/imports/ui/components/landing/landing.js delete mode 100644 ui/imports/ui/components/landing/landing.styl delete mode 100644 ui/imports/ui/components/link-type/link-type.html delete mode 100644 ui/imports/ui/components/link-type/link-type.js delete mode 100644 ui/imports/ui/components/link-type/link-type.styl delete mode 100644 ui/imports/ui/components/link-types-list/link-types-list.html delete mode 100644 ui/imports/ui/components/link-types-list/link-types-list.js delete mode 100644 ui/imports/ui/components/link-types-list/link-types-list.styl delete mode 100644 ui/imports/ui/components/list-info-box/list-info-box.html delete mode 100644 ui/imports/ui/components/list-info-box/list-info-box.js delete mode 100644 ui/imports/ui/components/list-info-box/list-info-box.styl delete mode 100644 ui/imports/ui/components/loading/loading.html delete mode 100644 ui/imports/ui/components/loading/loading.js delete mode 100644 ui/imports/ui/components/loading/loading.styl delete mode 100644 ui/imports/ui/components/main/main.html delete mode 100644 ui/imports/ui/components/main/main.js delete mode 100644 ui/imports/ui/components/main/main.styl delete mode 100644 ui/imports/ui/components/message/message.html delete mode 100644 ui/imports/ui/components/message/message.js delete mode 100644 ui/imports/ui/components/message/message.styl delete mode 100644 ui/imports/ui/components/messages-info-box/messages-info-box.html delete mode 100644 ui/imports/ui/components/messages-info-box/messages-info-box.js delete mode 100644 ui/imports/ui/components/messages-info-box/messages-info-box.styl delete mode 100644 ui/imports/ui/components/messages-list/messages-list.html delete mode 100644 ui/imports/ui/components/messages-list/messages-list.js delete mode 100644 ui/imports/ui/components/messages-list/messages-list.styl delete mode 100644 ui/imports/ui/components/messages-modal/messages-modal.html delete mode 100644 ui/imports/ui/components/messages-modal/messages-modal.js delete mode 100644 ui/imports/ui/components/messages-modal/messages-modal.styl delete mode 100644 ui/imports/ui/components/mt-input/mt-input.html delete mode 100644 ui/imports/ui/components/mt-input/mt-input.js delete mode 100644 ui/imports/ui/components/mt-input/mt-input.styl delete mode 100644 ui/imports/ui/components/mt-radios/mt-radios.html delete mode 100644 ui/imports/ui/components/mt-radios/mt-radios.js delete mode 100644 ui/imports/ui/components/mt-radios/mt-radios.styl delete mode 100644 ui/imports/ui/components/mt-select/mt-select.html delete mode 100644 ui/imports/ui/components/mt-select/mt-select.js delete mode 100644 ui/imports/ui/components/mt-select/mt-select.styl delete mode 100644 ui/imports/ui/components/network-graph-manager/network-graph-manager.html delete mode 100644 ui/imports/ui/components/network-graph-manager/network-graph-manager.js delete mode 100644 ui/imports/ui/components/network-graph-manager/network-graph-manager.styl delete mode 100644 ui/imports/ui/components/network-graph/network-graph.html delete mode 100644 ui/imports/ui/components/network-graph/network-graph.js delete mode 100644 ui/imports/ui/components/network-graph/network-graph.styl delete mode 100644 ui/imports/ui/components/network-info-box/network-info-box.html delete mode 100644 ui/imports/ui/components/network-info-box/network-info-box.js delete mode 100644 ui/imports/ui/components/network-info-box/network-info-box.styl delete mode 100644 ui/imports/ui/components/new-scanning/new-scanning.html delete mode 100644 ui/imports/ui/components/new-scanning/new-scanning.js delete mode 100644 ui/imports/ui/components/new-scanning/new-scanning.styl delete mode 100644 ui/imports/ui/components/pager/pager.html delete mode 100644 ui/imports/ui/components/pager/pager.js delete mode 100644 ui/imports/ui/components/pager/pager.styl delete mode 100644 ui/imports/ui/components/project-dashboard/project-dashboard.html delete mode 100644 ui/imports/ui/components/project-dashboard/project-dashboard.js delete mode 100644 ui/imports/ui/components/project-dashboard/project-dashboard.styl delete mode 100644 ui/imports/ui/components/region-dashboard/region-dashboard.html delete mode 100644 ui/imports/ui/components/region-dashboard/region-dashboard.js delete mode 100644 ui/imports/ui/components/region-dashboard/region-dashboard.styl delete mode 100644 ui/imports/ui/components/scanning-request/scanning-request.html delete mode 100644 ui/imports/ui/components/scanning-request/scanning-request.js delete mode 100644 ui/imports/ui/components/scanning-request/scanning-request.styl delete mode 100644 ui/imports/ui/components/scans-list/scans-list.html delete mode 100644 ui/imports/ui/components/scans-list/scans-list.js delete mode 100644 ui/imports/ui/components/scans-list/scans-list.styl delete mode 100644 ui/imports/ui/components/scheduled-scan/scheduled-scan.html delete mode 100644 ui/imports/ui/components/scheduled-scan/scheduled-scan.js delete mode 100644 ui/imports/ui/components/scheduled-scan/scheduled-scan.styl delete mode 100644 ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.html delete mode 100644 ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.js delete mode 100644 ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.styl delete mode 100644 ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.html delete mode 100644 ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.js delete mode 100644 ui/imports/ui/components/search-auto-complete-list/search-auto-complete.styl delete mode 100644 ui/imports/ui/components/select-model/select-model.html delete mode 100644 ui/imports/ui/components/select-model/select-model.js delete mode 100644 ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.html delete mode 100644 ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.js delete mode 100644 ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.styl delete mode 100644 ui/imports/ui/components/time-selection-widget/time-selection-widget.html delete mode 100644 ui/imports/ui/components/time-selection-widget/time-selection-widget.js delete mode 100644 ui/imports/ui/components/time-selection-widget/time-selection-widget.styl delete mode 100644 ui/imports/ui/components/top-navbar-menu/top-navbar-menu.html delete mode 100644 ui/imports/ui/components/top-navbar-menu/top-navbar-menu.js delete mode 100644 ui/imports/ui/components/top-navbar-menu/top-navbar-menu.styl delete mode 100644 ui/imports/ui/components/tree-node/tree-node.html delete mode 100644 ui/imports/ui/components/tree-node/tree-node.js delete mode 100644 ui/imports/ui/components/tree-node/tree-node.styl delete mode 100644 ui/imports/ui/components/user-list/user-list.html delete mode 100644 ui/imports/ui/components/user-list/user-list.js delete mode 100644 ui/imports/ui/components/user-list/user-list.styl delete mode 100644 ui/imports/ui/components/user-settings/user-settings.html delete mode 100644 ui/imports/ui/components/user-settings/user-settings.js delete mode 100644 ui/imports/ui/components/user-settings/user-settings.styl delete mode 100644 ui/imports/ui/components/user/user.html delete mode 100644 ui/imports/ui/components/user/user.js delete mode 100644 ui/imports/ui/components/user/user.styl delete mode 100644 ui/imports/ui/components/vedge-info-window/vedge-info-window.html delete mode 100644 ui/imports/ui/components/vedge-info-window/vedge-info-window.js delete mode 100644 ui/imports/ui/components/vedge-info-window/vedge-info-window.styl delete mode 100644 ui/imports/ui/components/zone-dashboard/zone-dashboard.html delete mode 100644 ui/imports/ui/components/zone-dashboard/zone-dashboard.js delete mode 100644 ui/imports/ui/components/zone-dashboard/zone-dashboard.styl delete mode 100644 ui/imports/ui/index.styl delete mode 100644 ui/imports/ui/lib/environment-tree-node-behavior.js delete mode 100644 ui/imports/ui/lib/input-model.js delete mode 100644 ui/imports/ui/lib/inventory-tree-node-behavior.js delete mode 100644 ui/imports/ui/lib/select-model.js delete mode 100644 ui/imports/ui/reducers/environment-panel.reducer.js delete mode 100644 ui/imports/ui/reducers/graph-tooltip-window.reducer.js delete mode 100644 ui/imports/ui/reducers/i18n.reducer.js delete mode 100644 ui/imports/ui/reducers/index.js delete mode 100644 ui/imports/ui/reducers/main-app.reducer.js delete mode 100644 ui/imports/ui/reducers/navigation.js delete mode 100644 ui/imports/ui/reducers/search-interested-parties.js delete mode 100644 ui/imports/ui/reducers/tree-node.reducer.js delete mode 100644 ui/imports/ui/reducers/vedge-info-window.reducer.js delete mode 100644 ui/imports/ui/store/index.js delete mode 100644 ui/imports/ui/store/store.js delete mode 100644 ui/lib/router.js delete mode 100644 ui/osdna.js delete mode 100755 ui/package-source.sh delete mode 100644 ui/package.json delete mode 100644 ui/public/backup - ic_cloud_queue_black_48dp_2x.png delete mode 100644 ui/public/cisco-favicon.ico delete mode 100644 ui/public/cisco-logo-load.png delete mode 100644 ui/public/dna-718905_600.png delete mode 100644 ui/public/get-started/dashboard-notifications.png delete mode 100644 ui/public/get-started/env-dashboard.png delete mode 100644 ui/public/get-started/env-delete-action.png delete mode 100644 ui/public/get-started/env-diting-os-db-credentails.png delete mode 100644 ui/public/get-started/env-edit-action.png delete mode 100644 ui/public/get-started/env-editing-amqp-credentials.png delete mode 100644 ui/public/get-started/env-editing-master-host-credentials.png delete mode 100644 ui/public/get-started/env-editing-monitoring.png delete mode 100644 ui/public/get-started/env-editing-os-end-point.png delete mode 100644 ui/public/get-started/env-editing-provision.png delete mode 100644 ui/public/get-started/env-editing.png delete mode 100644 ui/public/get-started/environments-pick.png delete mode 100644 ui/public/get-started/main-screen-explained.png delete mode 100644 ui/public/get-started/navbar-explained.png delete mode 100644 ui/public/get-started/new-environment-action.png delete mode 100644 ui/public/get-started/scan-action.png delete mode 100644 ui/public/get-started/scan-request-screen.png delete mode 100644 ui/public/get-started/selecting-dashboard.png delete mode 100644 ui/public/get-started/selecting-env.png delete mode 100644 ui/public/get-started/setting-action.png delete mode 100644 ui/public/get-started/setting-scans-action.png delete mode 100644 ui/public/ic_cloud_queue_black_48dp_2x-green.png delete mode 100644 ui/public/ic_cloud_queue_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_cloud_queue_black_48dp_2x-red.png delete mode 100644 ui/public/ic_cloud_queue_black_48dp_2x.png delete mode 100644 ui/public/ic_computer_black_48dp_2x-green.png delete mode 100644 ui/public/ic_computer_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_computer_black_48dp_2x-red.png delete mode 100644 ui/public/ic_computer_black_48dp_2x.png delete mode 100644 ui/public/ic_device_hub_black_24dp_2x-green.png delete mode 100644 ui/public/ic_device_hub_black_24dp_2x-orange.png delete mode 100644 ui/public/ic_device_hub_black_24dp_2x-red.png delete mode 100644 ui/public/ic_device_hub_black_24dp_2x.png delete mode 100644 ui/public/ic_dns_black_48dp_2x-green.png delete mode 100644 ui/public/ic_dns_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_dns_black_48dp_2x-red.png delete mode 100644 ui/public/ic_dns_black_48dp_2x.png delete mode 100644 ui/public/ic_gamepad_black_48dp_2x-green.png delete mode 100644 ui/public/ic_gamepad_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_gamepad_black_48dp_2x-red.png delete mode 100644 ui/public/ic_gamepad_black_48dp_2x.png delete mode 100644 ui/public/ic_keyboard_return_black_48dp_2x-green.png delete mode 100644 ui/public/ic_keyboard_return_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_keyboard_return_black_48dp_2x-red.png delete mode 100644 ui/public/ic_keyboard_return_black_48dp_2x.png delete mode 100644 ui/public/ic_lens_black_48dp_2x-green.png delete mode 100644 ui/public/ic_lens_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_lens_black_48dp_2x-red.png delete mode 100644 ui/public/ic_lens_black_48dp_2x.png delete mode 100644 ui/public/ic_settings_input_composite_black_48dp_2x-green.png delete mode 100644 ui/public/ic_settings_input_composite_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_settings_input_composite_black_48dp_2x-red.png delete mode 100644 ui/public/ic_settings_input_composite_black_48dp_2x.png delete mode 100644 ui/public/ic_settings_input_hdmi_black_48dp_2x-green.png delete mode 100644 ui/public/ic_settings_input_hdmi_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_settings_input_hdmi_black_48dp_2x-red.png delete mode 100644 ui/public/ic_settings_input_hdmi_black_48dp_2x.png delete mode 100644 ui/public/ic_storage_black_48dp_2x-green.png delete mode 100644 ui/public/ic_storage_black_48dp_2x-orange.png delete mode 100644 ui/public/ic_storage_black_48dp_2x-red.png delete mode 100644 ui/public/ic_storage_black_48dp_2x.png delete mode 100644 ui/public/ic_tv_black_24dp_2x.png delete mode 100644 ui/public/ic_zoom_out_map_black_24dp_2x.png delete mode 100644 ui/public/images/calipso-logo.jpg delete mode 100644 ui/public/instance.png delete mode 100644 ui/public/landing/calipso-logo.png delete mode 100644 ui/public/landing/docker.png delete mode 100644 ui/public/landing/eye.png delete mode 100644 ui/public/landing/first.png delete mode 100644 ui/public/landing/graph.png delete mode 100644 ui/public/landing/main-screen.png delete mode 100644 ui/public/landing/openstack.png delete mode 100644 ui/public/logo-cisco-png.png delete mode 100644 ui/public/logo-cisco.svg delete mode 100644 ui/public/logo_microscope_3.png delete mode 100644 ui/public/network.png delete mode 100644 ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-green.png delete mode 100644 ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-orange.png delete mode 100644 ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-red.png delete mode 100644 ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x.png delete mode 100644 ui/public/old-2017-09-25/ic_tv_black_24dp_2x-old-2017-09-25.png delete mode 100644 ui/public/old-2017-09-25/ic_zoom_out_map_black_24dp_2x-old-2017-09-25.png delete mode 100644 ui/public/particle.png delete mode 100644 ui/public/pnic.jpg delete mode 100644 ui/public/vconnector.png delete mode 100644 ui/public/vnic.png delete mode 100644 ui/public/vservice.png delete mode 100644 ui/public/wiki/addNewEnv.png delete mode 100644 ui/public/wiki/addNewEnv1.png delete mode 100644 ui/public/wiki/wizard1.png delete mode 100644 ui/public/wiki/wizard2.png delete mode 100644 ui/public/wiki/wizard3.png delete mode 100644 ui/public/wiki/wizard4.png delete mode 100644 ui/readme.md delete mode 100755 ui/run delete mode 100755 ui/run-dev.sh delete mode 100644 ui/server/main.js diff --git a/ui/.eslintrc.js b/ui/.eslintrc.js deleted file mode 100644 index 913c6f3..0000000 --- a/ui/.eslintrc.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = { - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true, - "meteor": true - }, - "extends": "eslint:recommended", - "parserOptions": { - "sourceType": "module" - }, - "rules": { - "indent": [ - "error", - 2 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "single", - { - "allowTemplateLiterals": true - } - ], - "semi": [ - "error", - "always" - ], - "no-console": 0, - "no-unused-vars": [ - "error", - { "argsIgnorePattern": "^_" } - ] - }, - "globals": { - "Iron": true, - "jQuery": true, - "d3Graph": true, - "d3": true, - "$": true, - "toastr": true, - "google": true, - "moment": true, - "WOW": true, - } -}; diff --git a/ui/.gitignore b/ui/.gitignore deleted file mode 100644 index 619933a..0000000 --- a/ui/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -**/*.swp -**/*.directory -node_modules/ diff --git a/ui/.meteor/.finished-upgraders b/ui/.meteor/.finished-upgraders deleted file mode 100644 index ce276f3..0000000 --- a/ui/.meteor/.finished-upgraders +++ /dev/null @@ -1,16 +0,0 @@ -# This file contains information which helps Meteor properly upgrade your -# app when you run 'meteor update'. You should check it into version control -# with your project. - -notices-for-0.9.0 -notices-for-0.9.1 -0.9.4-platform-file -notices-for-facebook-graph-api-2 -1.2.0-standard-minifiers-package -1.2.0-meteor-platform-split -1.2.0-cordova-changes -1.2.0-breaking-changes -1.3.0-split-minifiers-package -1.4.0-remove-old-dev-bundle-link -1.4.1-add-shell-server-package -1.4.3-split-account-service-packages diff --git a/ui/.meteor/.gitignore b/ui/.meteor/.gitignore deleted file mode 100644 index 4083037..0000000 --- a/ui/.meteor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local diff --git a/ui/.meteor/.id b/ui/.meteor/.id deleted file mode 100644 index 6041321..0000000 --- a/ui/.meteor/.id +++ /dev/null @@ -1,7 +0,0 @@ -# This file contains a token that is unique to your project. -# Check it into your repository along with the rest of this directory. -# It can be used for purposes such as: -# - ensuring you don't accidentally deploy one app on top of another -# - providing package authors with aggregated statistics - -ryedun1uy1llg1szr22d diff --git a/ui/.meteor/packages b/ui/.meteor/packages deleted file mode 100644 index a63ed10..0000000 --- a/ui/.meteor/packages +++ /dev/null @@ -1,48 +0,0 @@ -# Meteor packages used by this project, one per line. -# Check this file (and the other files in this directory) into your repository. -# -# 'meteor add' and 'meteor remove' will edit this file for you, -# but you can also edit it by hand. - -meteor-base@1.0.4 # Packages every Meteor app needs to have -mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.16 # The database Meteor supports right now -blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views -session@1.1.7 # Client-side reactive dictionary for your app -jquery@1.11.10 # Helpful client-side library -tracker@1.1.2 # Meteor's client-side reactive programming library - -es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.7.2 # Enable ECMAScript2015+ syntax in app code - -http@1.2.12 -iron:router -twbs:bootstrap -standard-minifier-css@1.3.4 -standard-minifier-js@2.0.0 -limemakers:three -pcel:loading -spectrum:material-design-lite -timmyg:wow -accounts-ui@1.1.9 -accounts-password@1.3.5 -zimme:active-route -gwendall:auth-client-callbacks -meteortoys:allthings -fortawesome:fontawesome -chrismbeckett:toastr -stolinski:stylus-multi -shell-server@0.2.3 -reactive-dict@1.1.8 -tmeasday:publish-counts -modules@0.8.1 -aldeed:simple-schema -mdg:validated-method -aldeed:collection2 -meteorhacks:aggregate -momentjs:moment -tsega:bootstrap3-datetimepicker -alanning:roles -percolate:migrations -npm-bcrypt -natestrauser:publish-performant-counts diff --git a/ui/.meteor/platforms b/ui/.meteor/platforms deleted file mode 100644 index efeba1b..0000000 --- a/ui/.meteor/platforms +++ /dev/null @@ -1,2 +0,0 @@ -server -browser diff --git a/ui/.meteor/release b/ui/.meteor/release deleted file mode 100644 index 605b4e1..0000000 --- a/ui/.meteor/release +++ /dev/null @@ -1 +0,0 @@ -METEOR@1.4.4.1 diff --git a/ui/.meteor/versions b/ui/.meteor/versions deleted file mode 100644 index 4f3b155..0000000 --- a/ui/.meteor/versions +++ /dev/null @@ -1,138 +0,0 @@ -accounts-base@1.2.16 -accounts-password@1.3.5 -accounts-ui@1.1.9 -accounts-ui-unstyled@1.2.1 -alanning:roles@1.2.16 -aldeed:collection2@2.10.0 -aldeed:collection2-core@1.2.0 -aldeed:schema-deny@1.1.0 -aldeed:schema-index@1.1.1 -aldeed:simple-schema@1.5.3 -allow-deny@1.0.5 -autoupdate@1.3.12 -babel-compiler@6.18.2 -babel-runtime@1.0.1 -base64@1.0.10 -binary-heap@1.0.10 -blaze@2.3.2 -blaze-html-templates@1.1.2 -blaze-tools@1.0.10 -boilerplate-generator@1.0.11 -caching-compiler@1.1.9 -caching-html-compiler@1.1.2 -callback-hook@1.0.10 -check@1.2.5 -chrismbeckett:toastr@2.1.2_1 -coffeescript@1.12.3_1 -ddp@1.2.5 -ddp-client@1.3.4 -ddp-common@1.2.8 -ddp-rate-limiter@1.0.7 -ddp-server@1.3.14 -deps@1.0.12 -diff-sequence@1.0.7 -ecmascript@0.7.3 -ecmascript-runtime@0.3.15 -ejson@1.0.13 -email@1.2.1 -es5-shim@4.6.15 -fastclick@1.0.13 -fortawesome:fontawesome@4.7.0 -geojson-utils@1.0.10 -gwendall:auth-client-callbacks@0.1.0 -hot-code-push@1.0.4 -html-tools@1.0.11 -htmljs@1.0.11 -http@1.2.12 -id-map@1.0.9 -iron:controller@1.0.12 -iron:core@1.0.11 -iron:dynamic-template@1.0.12 -iron:layout@1.0.12 -iron:location@1.0.11 -iron:middleware-stack@1.1.0 -iron:router@1.1.2 -iron:url@1.1.0 -jquery@1.11.10 -launch-screen@1.1.1 -less@2.7.9 -limemakers:three@0.75.0 -livedata@1.0.18 -localstorage@1.0.12 -logging@1.1.17 -mdg:validated-method@1.1.0 -mdg:validation-error@0.5.1 -meteor@1.6.1 -meteor-base@1.0.4 -meteorhacks:aggregate@1.3.0 -meteorhacks:collection-utils@1.2.0 -meteortoys:allthings@3.0.0 -meteortoys:authenticate@3.0.0 -meteortoys:autopub@3.0.0 -meteortoys:blueprint@3.0.0 -meteortoys:email@3.0.0 -meteortoys:hotreload@3.0.0 -meteortoys:listen@3.0.0 -meteortoys:method@3.0.4 -meteortoys:pub@3.0.4 -meteortoys:result@3.0.0 -meteortoys:shell@3.0.0 -meteortoys:status@3.0.0 -meteortoys:sub@3.0.0 -meteortoys:throttle@3.0.0 -meteortoys:toykit@3.0.4 -minifier-css@1.2.16 -minifier-js@2.0.0 -minimongo@1.0.21 -mobile-experience@1.0.4 -mobile-status-bar@1.0.14 -modules@0.8.2 -modules-runtime@0.7.10 -momentjs:moment@2.18.1 -mongo@1.1.16 -mongo-id@1.0.6 -mongo-livedata@1.0.12 -msavin:jetsetter@2.0.0 -msavin:mongol@2.0.1 -natestrauser:publish-performant-counts@0.1.2 -npm-bcrypt@0.9.2 -npm-mongo@2.2.24 -observe-sequence@1.0.16 -ordered-dict@1.0.9 -pcel:loading@1.0.3 -percolate:migrations@0.9.8 -promise@0.8.8 -raix:eventemitter@0.1.3 -random@1.0.10 -rate-limit@1.0.8 -reactive-dict@1.1.8 -reactive-var@1.0.11 -reload@1.1.11 -retry@1.0.9 -routepolicy@1.0.12 -service-configuration@1.0.11 -session@1.1.7 -sha@1.0.9 -shell-server@0.2.3 -spacebars@1.0.15 -spacebars-compiler@1.1.2 -spectrum:material-design-lite@0.0.4 -srp@1.0.10 -standard-minifier-css@1.3.4 -standard-minifier-js@2.0.0 -stolinski:stylus-multi@1.4.3 -templating@1.3.2 -templating-compiler@1.3.2 -templating-runtime@1.3.2 -templating-tools@1.1.2 -timmyg:wow@1.0.1 -tmeasday:publish-counts@0.8.0 -tracker@1.1.2 -tsega:bootstrap3-datetimepicker@4.17.37_1 -twbs:bootstrap@3.3.6 -ui@1.0.13 -underscore@1.0.10 -url@1.1.0 -webapp@1.3.15 -webapp-hashing@1.0.9 -zimme:active-route@2.3.2 diff --git a/ui/Dockerfile b/ui/Dockerfile deleted file mode 100644 index 1e3ba52..0000000 --- a/ui/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM meteorhacks/meteord:onbuild -#FROM jshimko/meteor-launchpad:latest diff --git a/ui/app.styl b/ui/app.styl deleted file mode 100644 index bdf9492..0000000 --- a/ui/app.styl +++ /dev/null @@ -1,34 +0,0 @@ -// Colors -black = #222 -grey = #D8D8D8 -purp = #524763 -dark-purp = #373142 -red = #E54B4B -teal = #82D8D8 -dark-teal = #66A6A6 -green = #CBE56C -blue = #16528E -bright-blue = #0082C8 -maroon = #6A2140 -light-red = #CA5765 -pink = #CF256D -orange = #E8846B - -// cisco brand Colors -brand-blue = #2196F3 -spark-blue = #0A9AD7 -spark-green = #73BE46 -spark-grey = #D1D2D1 -dk-blue = #303f9f -light-grey = #efefef -dk-gray1 = #58585b -// cisco brand status Colors -status-blue = #64bbe3 -status-turq = #14a792 -status-green = #6cc04a -status-yellow = #ffcc00 -status-orange = #ff7300 -status-red = #cf2030 -// cisco accepteble colors - -@import './imports/ui/components/index'; diff --git a/ui/build-deploy b/ui/build-deploy deleted file mode 100755 index 1f3713e..0000000 --- a/ui/build-deploy +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -SECONDS=0 -OS_TARGET_PATH=".." -OS_TARGET_NAME=osdna-meteor-frontend-$(date +%Y-%m-%d-%s).tar.gz -OS_NAME=${PWD##*/} -OS_USER_DEV="eyal" -DEV_HOST="korlev-osdna-be.cisco.com" - -meteor build $OS_TARGET_PATH/ --architecture=os.linux.x86_64 -mv $OS_TARGET_PATH/$OS_NAME.tar.gz $OS_TARGET_PATH/$OS_TARGET_NAME - -duration=$SECONDS -echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed." - -echo "deploy to dev" -SECONDS=0 -echo "target $OS_TARGET_PATH/$OS_TARGET_NAME" -echo "user $OS_USER_DEV" -echo "dev $DEV_HOST" -scp $OS_TARGET_PATH/$OS_TARGET_NAME $OS_USER_DEV@$DEV_HOST\:\~ -echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed." diff --git a/ui/build.sh b/ui/build.sh deleted file mode 100755 index 4e33f30..0000000 --- a/ui/build.sh +++ /dev/null @@ -1,20 +0,0 @@ -######################################################################################## -# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others # -# # -# All rights reserved. This program and the accompanying materials # -# are made available under the terms of the Apache License, Version 2.0 # -# which accompanies this distribution, and is available at # -# http://www.apache.org/licenses/LICENSE-2.0 # -######################################################################################## -#!/usr/bin/env bash - -SECONDS=0 -OS_TARGET_PATH=".." -OS_TARGET_NAME=osdna-meteor-frontend-$(date +%Y-%m-%d-%s).tar.gz -OS_NAME=${PWD##*/} - -meteor build $OS_TARGET_PATH/ --architecture=os.linux.x86_64 -mv $OS_TARGET_PATH/$OS_NAME.tar.gz $OS_TARGET_PATH/$OS_TARGET_NAME - -duration=$SECONDS -echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed." diff --git a/ui/client/accounts-config.js b/ui/client/accounts-config.js deleted file mode 100644 index 68901ea..0000000 --- a/ui/client/accounts-config.js +++ /dev/null @@ -1,11 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -Accounts.ui.config({ - passwordSignupFields: 'USERNAME_ONLY', -}); \ No newline at end of file diff --git a/ui/client/css/accordionNavMenu.styl b/ui/client/css/accordionNavMenu.styl deleted file mode 100644 index b5ba1d5..0000000 --- a/ui/client/css/accordionNavMenu.styl +++ /dev/null @@ -1,259 +0,0 @@ -// for WIKI - -.os-accordion-nav-menu - .sm-menu-items-list - >.os-accordion-tree-node - >a - display none - -.left-nav-content-wiki { - width: 300px; - height: 100vh - background brand-blue - top 90px - position fixed -} - - -.left-nav-menu - float: left; - min-width: 100px; - outline: 0; - position: relative; - //margin-top -40px - shadow-level(1) - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - outline: 0; - .menu-footer, .menu-header - background: brand-blue; - color: #f0f0f0; - float: left; - font-weight: normal; - line-height: 50px; - font-size: 0.8em; - width: 100%; - border-bottom 1px solid black - .menu-footer - text-align: center; - .menu-header - height: 39px; - p - font-size 1.7em - padding 6px - margin 0px - - - i - cursor pointer - position absolute - top -5px - right 0 - display block - color white - padding-right 5px - trans() - &:hover - color spark-blue - opacity 0.8 - - ul - list-style: none; - margin: 0; - padding: 0; - li - display: block; - float: left; - position: relative; - width: 100%; - .menu-label - background: #f0f0f0; - border-radius: 100%; - color: #555555; - font-size: 11px; - font-weight: 800; - line-height: 18px; - min-width: 20px; - padding: 1px 2px 1px 1px; - position: absolute; - right: 18px; - text-align: center; - top: 14px; - a - background: brand-blue; - color: #f0f0f0; - float: left; - font-size: 13px; - overflow: hidden; - padding: 14px 22px; - position: relative; - text-decoration: none; - white-space: nowrap; - width: 100%; - trans() - &:hover - background: @background - 20%; - i - float: left; - font-size: 16px; - line-height: 18px; - text-align: left; - width: 34px; - -.left-nav-menu ul li .menu-label { - background: #f0f0f0; - border-radius: 100%; - color: #555555; - font-size: 11px; - font-weight: 800; - line-height: 18px; - min-width: 20px; - padding: 1px 2px 1px 1px; - position: absolute; - right: 18px; - text-align: center; - top: 14px; -} - -.left-nav-menu - ul - .submenu - display: none; - position: static; - width: 100%; - .submenu-indicator - line-height: 16px - li - clear: both; - width: 100%; - ul.submenu - display: none; - position: static; - width: 100%; - overflow: hidden; - a - background: brand-blue - 10% - border-left: solid 6px transparent; - border-top: none; - float: left; - font-size: 11px; - position: relative; - width: 100%; - &:hover - background @background - 20% - - -.left-nav-menu ul .submenu li .menu-label { - background: #f0f0f0; - border-radius: 100%; - color: #555555; - font-size: 11px; - font-weight: 800; - line-height: 18px; - min-width: 20px; - padding: 1px 2px 1px 1px; - position: absolute; - right: 18px; - text-align: center; - top: 12px; - top: 14px; -} - -.left-nav-menu ul .submenu li a - padding-left 40px - background brand-blue - 20% - -.left-nav-menu ul .submenu > li > ul.submenu > li > a - padding-left: 40px - background brand-blue - 30% - -.left-nav-menu ul .submenu > li > ul.submenu > li > ul.submenu > li > a - padding-left: 40px; - background brand-blue - 40% -.left-nav-menu ul .submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > a - padding-left: 50px; - background brand-blue - 50% -.left-nav-menu ul .submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > a - padding-left: 60px; - background brand-blue - 60% -.left-nav-menu ul .submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > a - padding-left: 70px; - background brand-blue - 70% -.left-nav-menu ul .submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > ul.submenu > li > a - padding-left: 80px; - background brand-blue - 80% - -.left-nav-menu .sm-open-close-indicator - float: right; - - i.fa - font-size: 10px; - width: 10px; - -.left-nav-menu .submenu-indicator { - -moz-transition: "transform .3s linear"; - -o-transition: "transform .3s linear"; - -webkit-transition: "transform .3s linear"; - transition: "transform .3s linear"; - float: right; - font-size: 20px; - line-height: 19px; - position: absolute; - right: 22px; -} - -.left-nav-menu .submenu-indicator-minus > .submenu-indicator { - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - -.left-nav-menu > ul > li.active > a { - background: #3b424d; - color: #ffffff; -} - - -.left-nav-menu > ul > li > a { border-bottom: solid 1px #3b424d; } - -.ink { - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - -webkit-transform: scale(0); - background: rgba(255, 255, 255, 0.3); - border-radius: 100%; - display: block; - position: absolute; - transform: scale(0); -} - -.animate-ink { - -moz-animation: ripple .3s linear; - -ms-animation: ripple .3s linear; - -o-animation: ripple .3s linear; - -webkit-animation: ripple .3s linear; - animation: ripple .3s linear; -} - -// @-moz-keyframes 'ripple' { -// 100% { -// opacity: 0; -// transform: scale(2.5); -// } -// } -// @-webkit-keyframes 'ripple' { -// 100% { -// opacity: 0; -// transform: scale(2.5); -// } -// } -// @keyframes 'ripple' { -// 100% { -// opacity: 0; -// transform: scale(2.5); -// } -// } diff --git a/ui/client/css/components.styl b/ui/client/css/components.styl deleted file mode 100644 index a4b2f04..0000000 --- a/ui/client/css/components.styl +++ /dev/null @@ -1,187 +0,0 @@ -.main-layout - margin 30px 30px 30px 330px - -.main-layout-no-nav - margin 0px - -.site-sidenav - width: 300px; - min-width: 300px; - max-width: 300px; - //height: 100vh - height: initial; - align-self: stretch; - min-height: 95vh; - background brand-blue - trans() - -.site-sidenav-collapse - width: 30px - min-width: 30px - max-width: 30px - min-height 100vh - background brand-blue - color white - margin-top -40px - trans() - -.cards - color #FFF - padding 20px - margin-bottom 30px - .material-icons - padding-top 20px - shadow-level(1) - trans() - &:hover - shadow-level(2) - &.not-active - shadow-level (0) - &.blue - background-color spark-blue - &.green - background-color status-green - &.grey - background-color dk-gray1 - &.light-grey - background-color light-grey - &.dk-blue - background-color dk-blue - &.orange - background-color status-orange - &.red - background-color status-red - &.white - background #FFF - color #000 - &.blue-text - color spark-blue - &.green-text - .fa, .material-icons - color status-green - h5 - border-bottom 3px solid status-green - p.active - padding-top 3px - font-size 1.2em - color status-green - &.orange-text - .fa, .material-icons - color status-orange - h5 - border-bottom 3px solid status-orange - p.active - padding-top 3px - font-size 1.2em - color status-orange - &.red-text - .fa, .material-icons - color status-red - h5 - border-bottom 3px solid status-red - p.active - padding-top 3px - font-size 1.2em - color status-red - h3 - color spark-blue - font-size 2em - border-bottom 3px solid spark-blue - p.text - color #000 - .fa, .material-icons - font-size 4em - &.title - h4 - margin 0 - text-align center - color spark-blue - -.cards-w250 - @extend .cards - padding 20px 5px - max-height 100px - width: 250px - max-width: 250px - min-width: 250px - text-align center - .fa, .material-icons - font-size 3em - p - margin 0 - span - font-size 1.3em - font-weight bold - -.cards-w300 - @extend .cards - max-height 100px - width: 300px - max-width: 300px - min-width: 300px; - p - font-size 1.1em - span - font-size 1.3em - font-weight bold - -.cards-w300-h60 - @extend .cards-w300 - font-size 0.9em - height 60px - .fa, .material-icons - font-size 2em - &:hover - shadow-level(1) - -.cards-flex-col-h120 - @extend .cards - height: 120px - max-height 120px - min-height 120px - h5 - padding 0px - margin 0px - a - color spark-blue - p - font-size 1em - padding 0px - margin 0px - span - font-size 1.3em - font-weight bold - -.cards-450 - @extend .cards - width: 520px - max-width: 520px - min-width: 520px - p - font-size 1.1em - span - font-size 1.3em - font-weight bold - .material-icons - color spark-blue - font-size 5em - padding 40px 30px - -.cards-flex-col-h500 - @extend .cards - margin-right 30px - height 500px - max-height 500px - min-height 500px - p - font-size 1.1em - span - font-size 1.3em - font-weight bold - .material-icons - color spark-blue - font-size 8em - padding 40px - -.margin-top-40 - margin-top 40px diff --git a/ui/client/css/d3graph.styl b/ui/client/css/d3graph.styl deleted file mode 100644 index 6d53c45..0000000 --- a/ui/client/css/d3graph.styl +++ /dev/null @@ -1,47 +0,0 @@ - -.node circle { - fill: steelblue; -} -.node text { - font: bold 14px sans-serif; - fill: rgb(16, 15, 15); - text-shadow: 0 0px 0 #fff; - /*font-size: 0.8em;*/ -} -.link { - /* - fill: #1313AB; - stroke: #1313AB; - */ -} -.different-groups{ - stroke: #999; -} -.default { - stroke: #fbb; - stroke-width: 4px; -} -.outline { - stroke: #844; - stroke-width: 6px; -} - -div.tooltip { - position: absolute; - text-align: left; - opacity 1 - font: bold 18px sans-serif !important; - /* width: 60px; */ - /* height: 28px; */ - padding: 20px; - font: 16px sans-serif; - background: dk-gray1; - color white - border: 2px solid stark-blue - pointer-events: none; -} -.background { - stroke: white; - stroke-width: 1px; - fill: white; -} diff --git a/ui/client/css/flex.styl b/ui/client/css/flex.styl deleted file mode 100644 index e780d78..0000000 --- a/ui/client/css/flex.styl +++ /dev/null @@ -1,23 +0,0 @@ -// flex grid system -.flex-box - list-style none - display flex - flex-wrap wrap - // border 2px solid red - .flex-box-1 - flex 1 - // border 2px solid green - .flex-box-2 - flex 2 - .flex-box-3 - flex 3 - .flex-box-4 - flex 4 -.flex-col - flex-direction column -.justify-content-around - justify-content space-around -.justify-content-between - justify-content space-between -.justify-content-start - justify-content flex-start \ No newline at end of file diff --git a/ui/client/css/header.styl b/ui/client/css/header.styl deleted file mode 100644 index ebc3ff6..0000000 --- a/ui/client/css/header.styl +++ /dev/null @@ -1,118 +0,0 @@ -.os-alarm-icons - display: flex; - flex-flow: row; - justify-content: flex-end; - - padding-top 50px - //background-color dk-gray1 - background-color: brand-blue - border-bottom: solid 1px black; - - .breadcrumb - background-color dk-gray1 - - .alarm-icons - padding-top 15px - padding-right 10px - color #FFF - //text-align right - - .material-icons:hover - cursor pointer - color spark-grey - trans() - - .dropdown - display inline - trans() - - .dropdown-menu-right - right 25px - - .dropdown-header - font-size 1.4em - color dk-gray1 - - >a - font-size: 20px; - color dk-gray1 - line-height: 1.42857143; - padding-left: 4px; - -img.navbar-brand.navbar-custom { - padding-left: 40px; -} - -p.navbar-brand.navbar-custom{ - margin: 0px; - padding-left: 95px; - color: #FFF; -} - -nav.navbar-inverse.navbar-custom - background-color: brand-blue - color: #FFF; - a - color: #FFF; - .login-close-text - color: #555; - #login-name-link:hover - color: rgb(63,81,181); - &:hover - color: rgb(63,81,181); - trans() - a.droplist - color: brand-blue - padding: 10px 0px 0px 10px - - .search - position: relative; - color: white - input - height: 30px; - background: brand-blue - // text-indent: 25px; - padding-left: 20px; - border 0px - border-bottom 2px solid spark-grey - width 175px - &:hover, &:active, &:focus - border-bottom 2px solid white - ::-webkit-input-placeholder - color: white - .fa-search - position: absolute; - top: 7px; - - .search-auto-complete - position: absolute; - right: 0; - top: 34px - z-index: 1000; - -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: brand-blue - background-color: #fff; -} - -/* Login form style */ -.sign-in #login-sign-in-link, #login-name-link, #login-name-link.login-link-text { - color: #FFF; - text-decoration: none; -} - -.login-button#login-buttons-open-change-password, -.login-button#login-buttons-password, -.login-button#login-buttons-logout { - background-color: brand-blue - border: brand-blue -} - -.login-button#login-buttons-open-change-password:hover, -.login-button#login-buttons-password:hover, -.login-button#login-buttons-logout:hover { - background-color: rgb(63,81,181); - border: rgb(63,81,181); -} diff --git a/ui/client/css/landing.css b/ui/client/css/landing.css deleted file mode 100644 index 59c0806..0000000 --- a/ui/client/css/landing.css +++ /dev/null @@ -1,122 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -/* ======= landging page =======*/ - -a.mdl-button:hover{ - text-decoration: none; -} - -.mdl-button--raised.mdl-button--colored { - background-color: #2196F3; -} - -.mdl-button--accent.mdl-button--accent.mdl-button--raised:hover { - background-color: rgb(63,81,181); - -} - -section.section-margin-50 { - margin: 50px 0; -} - -.background-blue{ - background-color: #2196F3; - color: #f9f9f9; -} -.background-white { - border-color: #FFF; -} - -.background-grey { - background-color: #f9f9f9; -} - -.home-fullscreen { - /* padding: 25px; */ -} - -.mtop-50{ - margin-top: 100px; -} - -.font20{ - font-size: 20px; -} - -.title-border-bottom{ - border-bottom: 5px solid #2196F3; -} -.text-align-center{ - text-align: center; -} - -/* -.home_mockups { - position: relative; - margin-top: 4rem; - margin-bottom: -1rem; - z-index: 3; -} - -.home_mockups_1 { - position: relative; - animation-delay: 0.5s; -} - -.home_mockups_2 { - animation-delay: 1s; -} - -.home_mockups_2, .home_mockups_3 { - position: absolute; - margin: 0 auto; - top: 0; - right: 0; - left: 0; - bottom: 0; -} -*/ - -.box { - margin: 50px; -} - -.box-side{ - margin: 10px 50px; -} -/* ======= End of section =========*/ - -/*====== Main page =======*/ -.logo{ - padding: 10px; -} - -.view-100{ - height: 100vh; -} - -.user-bar{ - background: #42A5F5; - color: #fff; - padding-left: 15px; -} -/* ======= End of section =======*/ - -/*// Rules for sizing the icon.*/ -.material-icons.md-18 { font-size: 21px; } -.material-icons.md-24 { font-size: 24px; } -.material-icons.md-36 { font-size: 36px; } -.material-icons.md-48 { font-size: 48px; } -/*// Rules for using icons as black on a light background.*/ -.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } -.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } -/*// Rules for using icons as white on a dark background.*/ -.material-icons.md-light { color: rgba(255, 255, 255, 1); } -.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); } -/* ======= End of section ===========*/ diff --git a/ui/client/css/loading.styl b/ui/client/css/loading.styl deleted file mode 100644 index 1545b58..0000000 --- a/ui/client/css/loading.styl +++ /dev/null @@ -1,19 +0,0 @@ - - -.loading-message { - color: white; - font-size: 2.5em; - font-weight: 300; - font-family: sans-serif; -} - -.sk-spinner-rotating-plane.sk-spinner { - background-color: white; -} - -.landing - .material-icons - font-size 64px - -.margin-50 - margin 80px 0px \ No newline at end of file diff --git a/ui/client/css/modals.styl b/ui/client/css/modals.styl deleted file mode 100644 index f0d4741..0000000 --- a/ui/client/css/modals.styl +++ /dev/null @@ -1,10 +0,0 @@ -.modal-header - .material-icons - color spark-blue - -.modal-body - a - color spark-blue - h5 - color spark-blue - border-bottom 2px solid spark-blue diff --git a/ui/client/css/plugins.styl b/ui/client/css/plugins.styl deleted file mode 100644 index cd602ba..0000000 --- a/ui/client/css/plugins.styl +++ /dev/null @@ -1,4 +0,0 @@ -.graph - width: 100%; - height: 400px; - border: 3px solid spark-blue; \ No newline at end of file diff --git a/ui/client/css/wizard.css b/ui/client/css/wizard.css deleted file mode 100644 index ebac04f..0000000 --- a/ui/client/css/wizard.css +++ /dev/null @@ -1,28 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -.btn-mgt-5 { - margin-top: 5px; -} - -.nav > li > a { - color: #2196F3; -} - -.form-horizontal { - margin-top: 25px; -} - -.mdl-button { - color: #2196F3; -} - -.mdl-button:hover { - background-color: rgb(63,81,181); - color: #FFF; -} diff --git a/ui/client/main.html b/ui/client/main.html deleted file mode 100644 index 5aabed7..0000000 --- a/ui/client/main.html +++ /dev/null @@ -1,18 +0,0 @@ - - - Cisco Calipso - - - - - - diff --git a/ui/client/main.js b/ui/client/main.js deleted file mode 100644 index 1502661..0000000 --- a/ui/client/main.js +++ /dev/null @@ -1,10 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import '/imports/startup/client'; -import '/imports/startup/both'; diff --git a/ui/client/main.styl b/ui/client/main.styl deleted file mode 100644 index e142eda..0000000 --- a/ui/client/main.styl +++ /dev/null @@ -1,85 +0,0 @@ -/* CSS declarations go here */ -normalize-css() - -// Colors -black = #222 -grey = #D8D8D8 -purp = #524763 -dark-purp = #373142 -red = #E54B4B -teal = #82D8D8 -dark-teal = #66A6A6 -green = #CBE56C -blue = #16528E -bright-blue = #0082C8 -maroon = #6A2140 -light-red = #CA5765 -pink = #CF256D -orange = #E8846B - -// cisco brand Colors -brand-blue = #2196F3 -spark-blue = #0A9AD7 -spark-green = #73BE46 -spark-grey = #D1D2D1 -dk-blue = #303f9f -light-grey = #efefef -dk-gray1 = #58585b -// cisco brand status Colors -status-blue = #64bbe3 -status-turq = #14a792 -status-green = #6cc04a -status-yellow = #ffcc00 -status-orange = #ff7300 -status-red = #cf2030 -// cisco accepteble colors - -// Material Shadows -shadow-level(l = 1) - if l == -1 - box-shadow: inset -2px 7px 9px -7px rgba(0,0,0,0.7); - if l == 0 - box-shadow: none; - if l == 1 - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - if l == 2 - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); - if l == 3 - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); - if l == 4 - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); - if l == 5 - box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22); - -// Common Transition -trans($sec = 0.3s) - transition: all $sec ease - -// Grid -$xsmall = 340px -$small = 500px -$med = 700px -$large = 960px -$wide = 1200px - -z = { - neg: -7, - lowest: 1, - low: 4, - mid: 5, - video: 6, - header: 7, - nav: 8, - mini: 9, - modal: 10, - highest: 11 -} - -$side-nav = 100px -$side-nav-large = 200px - -body{ - background light-grey -} - -@import 'css/*' diff --git a/ui/client/style/d3plusgraph.css b/ui/client/style/d3plusgraph.css deleted file mode 100644 index f811c80..0000000 --- a/ui/client/style/d3plusgraph.css +++ /dev/null @@ -1,14 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -#viz{ - /*margin: 166px 134px;*/ - color: white; - width: 90%; - height: 90%; -} \ No newline at end of file diff --git a/ui/client/style/landingpage.css b/ui/client/style/landingpage.css deleted file mode 100644 index 1fd3035..0000000 --- a/ui/client/style/landingpage.css +++ /dev/null @@ -1,138 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -/* wizard */ -.mdl-dialog { - width: 90vw !important; -} - -.mdl-tabs__panel{ - margin-top: 30px; -} - -.mdl-dialog__content { - border-left: 5px solid #2196F3; -} - - -/* ======= Home page =======*/ -.background-blue{ - background-color: #2196F3; - color: #f9f9f9; -} -.background-white { - border-color: #FFF; -} - -.background-grey { - background-color: #f9f9f9; -} - -.home-fullscreen { - /* padding: 25px; */ -} - -.mtop-50{ - margin-top: 100px; -} - -.font20{ - font-size: 20px; -} - -.title-border-bottom{ - border-bottom: 5px solid #2196F3; -} -.text-align-center{ - text-align: center; -} - -/* -.home_mockups { - position: relative; - margin-top: 4rem; - margin-bottom: -1rem; - z-index: 3; -} - -.home_mockups_1 { - position: relative; - animation-delay: 0.5s; -} - -.home_mockups_2 { - animation-delay: 1s; -} - -.home_mockups_2, .home_mockups_3 { - position: absolute; - margin: 0 auto; - top: 0; - right: 0; - left: 0; - bottom: 0; -} -*/ - -.box { - margin: 50px; -} - -.box-side{ - margin: 10px 50px; -} -/* ======= End of section =========*/ - - -/* ======= Login - Register pages ======= */ -.login-bg-primary { - width: 100%; - height: 30vh; - background-color: #2196F3; -} - -.login-bg-accent { - width: 100%; - height: 30vh; - background-color: #9C27B0; -} - -.login-card{ - margin-top: -70px; - padding: 10px; -} -/* ======= End of section =======*/ - -/*====== Main page =======*/ -.logo{ - padding: 10px; -} - -.view-100{ - height: 100vh; -} - -.user-bar{ - background: #42A5F5; - color: #fff; - padding-left: 15px; -} -/* ======= End of section =======*/ - -/*// Rules for sizing the icon.*/ -.material-icons.md-18 { font-size: 21px; } -.material-icons.md-24 { font-size: 24px; } -.material-icons.md-36 { font-size: 36px; } -.material-icons.md-48 { font-size: 48px; } -/*// Rules for using icons as black on a light background.*/ -.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } -.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } -/*// Rules for using icons as white on a dark background.*/ -.material-icons.md-light { color: rgba(255, 255, 255, 1); } -.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); } -/* ======= End of section ===========*/ diff --git a/ui/client/style/multilevelorig.css b/ui/client/style/multilevelorig.css deleted file mode 100644 index c73c7e6..0000000 --- a/ui/client/style/multilevelorig.css +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -/* -body { - margin: 0; - padding: 0; - background: rgb(161, 183, 206); - overflow: hidden; -} -*/ -#menu{ - margin-top: -50px; -} -#pushobj { - position: absolute; - top: 92px; - left: 384px; - color: #fff; - background: rgb(161, 183, 206); - font-family: 'Open Sans Condensed', sans-serif; - font-size: 2em; - z-index: 1; - width: 100%; - height: 89%; -} -/* -.breadcrumb > li + li:before { - color: #CCCCCC; - content: "/ "; - padding: 0 5px; -} -.breadcrumb{ - margin-bottom: 0px; - padding: 14px 15px; - font-size: 0.6em; -} -*/ diff --git a/ui/client/style/threeTest.css b/ui/client/style/threeTest.css deleted file mode 100644 index 7a04d9c..0000000 --- a/ui/client/style/threeTest.css +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -/* -body, html { - width: 100%; - height: 100%; - padding: 0; - margin: 0; - position: relative; - overflow: hidden; - background: rgb(161, 183, 206); -} -*/ -/* -svg { - !*background-color: antiquewhite;*! - background-color: rgb(161, 183, 206); - padding-top: 100px; - -} - -.node circle { - fill: steelblue; -} -.node text { - font: bold 12px sans-serif; - fill: rgb(16, 15, 15); - text-shadow: 0 0px 0 #fff; - font-size: 0.6em; -} -.link { - fill: #1313AB; - stroke: #1313AB; -} -.default { - stroke: #fbb; - stroke-width: 4px; -} -.outline { - stroke: #844; - stroke-width: 6px; -} -.link-group text{ - font-size: 0.5em; - fill: rgba(8, 8, 8, 0.73); -} -div.tooltip { - position: absolute; - text-align: left; - font: bold 18px sans-serif !important; - !* width: 60px; *! - !* height: 28px; *! - padding: 2px; - font: 16px sans-serif; - background: #50DFE0; - border: 0px; - border-radius: 10px; - pointer-events: none; -}*/ diff --git a/ui/client/style/threeTest2.css b/ui/client/style/threeTest2.css deleted file mode 100644 index 83ec163..0000000 --- a/ui/client/style/threeTest2.css +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************************/ -/* Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others */ -/* */ -/* All rights reserved. This program and the accompanying materials */ -/* are made available under the terms of the Apache License, Version 2.0 */ -/* which accompanies this distribution, and is available at */ -/* http://www.apache.org/licenses/LICENSE-2.0 */ -/****************************************************************************************/ -#canvas { -} - -#canvas-force { - width: 100%; - height: 100%; - /*float: left;*/ -} - -/* -body { - margin: 0px; -} -*/ - -#tooltip-container { - position: absolute; - background-color: #404040; - color: #fff; - opacity: 0.9; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - border: 1px solid; - display: none; - font-family: "Arial"; - font-size: 12px; -} - -.tooltip_key { - font-weight: bold; -} \ No newline at end of file diff --git a/ui/client/templates/envdialog.html b/ui/client/templates/envdialog.html deleted file mode 100644 index 77d8375..0000000 --- a/ui/client/templates/envdialog.html +++ /dev/null @@ -1,131 +0,0 @@ - - diff --git a/ui/client/templates/header.html b/ui/client/templates/header.html deleted file mode 100644 index 0bfda0b..0000000 --- a/ui/client/templates/header.html +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/ui/client/templates/mainPage.html b/ui/client/templates/mainPage.html deleted file mode 100644 index 1b85c15..0000000 --- a/ui/client/templates/mainPage.html +++ /dev/null @@ -1,207 +0,0 @@ - - diff --git a/ui/contributors.md b/ui/contributors.md deleted file mode 100644 index 7453147..0000000 --- a/ui/contributors.md +++ /dev/null @@ -1,6 +0,0 @@ -meteor Calipso UI branch -================ - -contacts: -* Ofir Ashery -* Stas Isakov diff --git a/ui/doc/tasks/refactor-tree-node-to-component.md b/ui/doc/tasks/refactor-tree-node-to-component.md deleted file mode 100644 index ccdb870..0000000 --- a/ui/doc/tasks/refactor-tree-node-to-component.md +++ /dev/null @@ -1,13 +0,0 @@ -# Task - -## Libraries - -### Added - -#### Meteor - -reactive-dict -tmeasday:publish-counts - -#### Node -bcrypt - nodejs diff --git a/ui/howto_build.md b/ui/howto_build.md deleted file mode 100644 index 7dfb79e..0000000 --- a/ui/howto_build.md +++ /dev/null @@ -1,43 +0,0 @@ -# Calipso - -## Run - -```bash -./run.sh -``` - -## Build - -```bash -meteor build --architecture=os.linux.x86_64 ./ -``` - -### Soruce Build - -```bash -tar --exclude='./.meteor/local' --exclude='./node_modules' --exclude='./.git' -zcvf ../calipso-source-$(date +%Y-%m-%d).tar.gz . -``` -## Testing - Build with Docker - -Testing on staging - -```bash -docker run -d \ - -e ROOT_URL=http://testing-server-example.com \ - -e MONGO_URL=mongodb://testing-server-example.com:27017/calipso \ - -v /home/ofir/calipso:/bundle \ - -p 80:80 \ - kadirahq/meteord:base -``` - -Testing on local - -```bash -docker run \ - --net=host \ - -e ROOT_URL=http://localhost \ - -e MONGO_URL=mongodb://localhost:27017/calipso \ - -v /home/eyal_work/projects/cisco/output:/bundle \ - kadirahq/meteord:base -``` - diff --git a/ui/imports/api/accounts/methods.js b/ui/imports/api/accounts/methods.js deleted file mode 100644 index f6c271c..0000000 --- a/ui/imports/api/accounts/methods.js +++ /dev/null @@ -1,203 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; -import { Environments } from '/imports/api/environments/environments'; -import { UserSettings } from '/imports/api/user-settings/user-settings'; - -let userSchema = new SimpleSchema({ - _id: { type: String }, - username: { type: String }, - password: { type: String }, - viewEnvs: { type: [ String ] }, - editEnvs: { type: [ String ] }, -}); - -export const insert = new ValidatedMethod({ - name: 'accounts.insert', - validate: userSchema - .pick([ - 'username', - 'password', - 'viewEnvs', - 'viewEnvs.$', - 'editEnvs', - 'editEnvs.$', - ]).validator({ clean: true, filter: false }), - run({ - username, - password, - viewEnvs, - editEnvs, - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-users', Roles.GLOBAL_GROUP)) { - throw new Meteor.Error('unauthorized for removing users'); - } - - let userId = Accounts.createUser({ - username: username, - password: password - }); - - addRole(viewEnvs, 'view-env', userId); - addRole(editEnvs, 'edit-env', userId); - - let userSettings = UserSettings.schema.clean({}); - userSettings = R.merge(userSettings, { - user_id: userId, - }); - UserSettings.insert(userSettings); - } -}); - - - -export const update = new ValidatedMethod({ - name: 'accounts.update', - validate: userSchema - .pick([ - '_id', - // 'password', - 'viewEnvs', - 'viewEnvs.$', - 'editEnvs', - 'editEnvs.$', - ]).validator({ clean: true, filter: false }), - run({ - _id, - //_password, - viewEnvs, - editEnvs, - }) { - console.log('accounts - methods - update - start'); - //throw new Meteor.Error('unimplemented'); - if (! Roles.userIsInRole(Meteor.userId(), 'manage-users', Roles.GLOBAL_GROUP)) { - throw new Meteor.Error('unauthorized for updating users'); - } - - /* - let item = Meteor.users.findOne({ _id: _id }); - console.log('user for update: ', item); - - item = R.merge(R.pick([ - 'password', - ], item), { - password - }); - */ - - /* - let item = { - //password - }; - - Meteor.users.update({ _id: _id }, { $set: item }); - */ - - let currentViewEnvs = R.map((env) => { - return env.name; - }, Environments.find({ 'auth.view-env': { $in: [ _id ] }}).fetch()); - - let viewEnvsForDelete = R.difference(currentViewEnvs, viewEnvs); - let viewEnvsForAdd = R.difference(viewEnvs, currentViewEnvs); - - removeRole(viewEnvsForDelete, 'view-env', _id); - addRole(viewEnvsForAdd, 'view-env', _id); - - // - - let currentEditEnvs = R.map((env) => { - return env.name; - }, Environments.find({ 'auth.edit-env': { $in: [ _id ] }}).fetch()); - - let editEnvsForDelete = R.difference(currentEditEnvs, editEnvs); - let editEnvsForAdd = R.difference(editEnvs, currentEditEnvs); - - removeRole(editEnvsForDelete, 'edit-env', _id); - addRole(editEnvsForAdd, 'edit-env', _id); - - console.log('accounts - methods - update - end'); - } -}); - -export const remove = new ValidatedMethod({ - name: 'accounts.remove', - validate: userSchema - .pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-users', Roles.GLOBAL_GROUP)) { - throw new Meteor.Error('unauthorized for removing users'); - } - - let user = Meteor.users.findOne({ _id: _id }); - console.log('user for remove: ', user); - - Meteor.users.remove({ _id: _id }); - } -}); - -function removeRole(rolesForRemoval, roleName, userId) { - R.forEach((envName) => { - let env = Environments.findOne({ name: envName }); - let auth = env.auth; - if (R.isNil(auth)) { auth = { }; } - if (R.isNil(R.path([roleName], auth))) { - auth = R.assoc(roleName, [], auth); - } - auth = R.assoc(roleName, R.reject(R.equals(userId), auth[roleName]), auth); - - updateEnv(auth, env); - //let newEnv = R.merge(env, { auth: auth }); - - }, rolesForRemoval); -} - -function addRole(rolesForAdd, roleName, userId) { - R.forEach((envName) => { - let env = Environments.findOne({ name: envName }); - let auth = env.auth; - if (R.isNil(auth)) { auth = { }; } - if (R.isNil(R.path([roleName], auth))) { - auth = R.assoc(roleName, [], auth); - } - auth = R.assoc(roleName, R.append(userId, auth[roleName]), auth); - - updateEnv(auth, env); - //let newEnv = R.merge(env, { auth: auth }); - - }, rolesForAdd); -} - -function updateEnv(auth, env) { - console.log('update env. set: ' + R.toString(auth)); - try { - Environments.update(env._id, { - $set: { - auth: auth, - configuration: env.configuration, - //distribution: distribution, - //name: name, - type_drivers: env.type_drivers, - mechanism_drivers: env.mechanism_drivers, - listen: env.listen, - enable_monitoring: env.enable_monitoring, - } - }); - } catch(e) { - console.error('error in update: ' + R.toString(e)); - throw new Meteor.Error('enviornment update error', - `unable to update ACL for environment - ${env.name}. Please check envrironment info. ${e.message}`); - } -} diff --git a/ui/imports/api/accounts/server/publications.js b/ui/imports/api/accounts/server/publications.js deleted file mode 100644 index 47718d3..0000000 --- a/ui/imports/api/accounts/server/publications.js +++ /dev/null @@ -1,29 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -//import * as R from 'ramda'; -//import { Environments } from '/imports/api/environments/environments'; -//import { Roles } from 'meteor/alanning:roles'; - -Meteor.publish('users', function () { - console.log('server subscribtion to: users'); - /* - let that = this; - - let query = {}; - - if (! Roles.userIsInRole(that.userId, 'manage-users', 'default-group')) { - query = { - _id: that.userId - }; - } - */ - - return Meteor.users.find({}); -}); diff --git a/ui/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data.js b/ui/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data.js deleted file mode 100644 index 13c877a..0000000 --- a/ui/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data.js +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import * as R from 'ramda'; - -export const NodeHoverAttr = new Mongo.Collection( - 'attributes_for_hover_on_data', { idGeneration: 'MONGO' }); - -export const calcAttrsForItem = function (node, attrsDefsRec) { - if (R.isNil(attrsDefsRec)) { - return []; - } - - let attrsDefs = attrsDefsRec.attributes; - - return R.reduce((acc, attrDef) => { - if (R.is(Array, attrDef)) { - let value = R.path(attrDef, node); - if (R.isNil(value)) { return acc; } - let name = R.join('.', attrDef); - return R.append(R.assoc(name, value, {}), acc); - - } else { - return R.ifElse(R.isNil, - R.always(acc), - (attrVal) => R.append(R.assoc(attrDef, attrVal, {}), acc) - )(R.prop(attrDef, node)); - } - }, [], attrsDefs); -}; diff --git a/ui/imports/api/attributes_for_hover_on_data/methods.js b/ui/imports/api/attributes_for_hover_on_data/methods.js deleted file mode 100644 index 1eda375..0000000 --- a/ui/imports/api/attributes_for_hover_on_data/methods.js +++ /dev/null @@ -1,8 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// diff --git a/ui/imports/api/attributes_for_hover_on_data/server/publications.js b/ui/imports/api/attributes_for_hover_on_data/server/publications.js deleted file mode 100644 index bc42d58..0000000 --- a/ui/imports/api/attributes_for_hover_on_data/server/publications.js +++ /dev/null @@ -1,25 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; - -import { NodeHoverAttr } from '../attributes_for_hover_on_data.js'; - -Meteor.publish('attributes_for_hover_on_data', function () { - console.log('server subscribtion to: attributes_for_hover_on_data'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - return NodeHoverAttr.find({}); -}); - -Meteor.publish('attributes_for_hover_on_data?type', function (type) { - console.log('server subscribtion to: attributes_for_hover_on_data?type'); - console.log('- type: ' + type); - - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - return NodeHoverAttr.find({ 'type': type}); -}); diff --git a/ui/imports/api/clique-constraints/clique-constraints.js b/ui/imports/api/clique-constraints/clique-constraints.js deleted file mode 100644 index 8641715..0000000 --- a/ui/imports/api/clique-constraints/clique-constraints.js +++ /dev/null @@ -1,48 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Constants } from '/imports/api/constants/constants'; - -export const CliqueConstraints = new Mongo.Collection( - 'clique_constraints', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - - focal_point_type: { - type: String, - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'object_types_for_links' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - } - }, - - constraints: { - type: [String], - minCount: 1, - custom: function () { - let that = this; - let objectTypes = Constants.findOne({ name: 'object_types_for_links' }).data; - - let findResult = R.intersection(that.value, R.pluck('value', objectTypes)); - if (findResult.length !== that.value.length) { return 'notAllowed'; } - - return; - }, - }, -}; - -CliqueConstraints.schema = new SimpleSchema(schema); -CliqueConstraints.attachSchema(CliqueConstraints.schema); diff --git a/ui/imports/api/clique-constraints/methods.js b/ui/imports/api/clique-constraints/methods.js deleted file mode 100644 index c9ae997..0000000 --- a/ui/imports/api/clique-constraints/methods.js +++ /dev/null @@ -1,99 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; - -import { CliqueConstraints } from './clique-constraints'; - -export const insert = new ValidatedMethod({ - name: 'clique_constraints.insert', - validate: CliqueConstraints.simpleSchema() - .pick([ -// 'environment', - 'focal_point_type', - 'constraints', - 'constraints.$', - ]).validator({ clean: true, filter: false }), - run({ - // environment, - focal_point_type, - constraints, - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-constraints', Roles.GLOBAL_GROUP)) { - throw new Meteor.Error('unauthorized for inserting clique constraints'); - } - - let cliqueConstraint = CliqueConstraints.schema.clean({}); - - cliqueConstraint = R.merge(cliqueConstraint, { - // environment, - focal_point_type, - constraints, - }); - - CliqueConstraints.insert(cliqueConstraint); - } -}); - -export const remove = new ValidatedMethod({ - name: 'clique_constraints.remove', - validate: CliqueConstraints.simpleSchema() - .pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-constraints', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for removing clique constraints'); - } - - let cliqueConstraint = CliqueConstraints.findOne({ _id: _id }); - console.log('clique constraint for remove: ', cliqueConstraint); - - CliqueConstraints.remove({ _id: _id }); - } -}); - -export const update = new ValidatedMethod({ - name: 'clique_constraints.update', - validate: CliqueConstraints.simpleSchema() - .pick([ - '_id', - 'focal_point_type', - 'constraints', - 'constraints.$', - ]).validator({ clean: true, filter: false }), - run({ - _id, - focal_point_type, - constraints, - }) { - - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-constraints', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for removing clique constraints'); - } - - let item = CliqueConstraints.findOne({ _id: _id }); - console.log('clique constraints for update: ', item); - console.log('current user', Meteor.userId()); - - item = R.merge( - R.pick([ - 'focal_point_type', - 'constraints', - ], item), { - focal_point_type, - constraints, - }); - - CliqueConstraints.update({ _id: _id }, { $set: item }); - } -}); diff --git a/ui/imports/api/clique-constraints/server/publications.js b/ui/imports/api/clique-constraints/server/publications.js deleted file mode 100644 index 6e4ae1a..0000000 --- a/ui/imports/api/clique-constraints/server/publications.js +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; - -import { CliqueConstraints } from '../clique-constraints.js'; - -Meteor.publish('clique_constraints', function () { - console.log('server subscribtion: clique_constraints'); - - //let that = this; - - let query = {}; - return CliqueConstraints.find(query); -}); - -Meteor.publish('clique_constraints?_id', function (_id) { - console.log('server subscribtion: clique_constraints?_id'); - console.log(_id); - - //let that = this; - - let query = { _id: _id }; - return CliqueConstraints.find(query); -}); diff --git a/ui/imports/api/clique-types/clique-types.js b/ui/imports/api/clique-types/clique-types.js deleted file mode 100644 index e464b8f..0000000 --- a/ui/imports/api/clique-types/clique-types.js +++ /dev/null @@ -1,108 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Constants } from '/imports/api/constants/constants'; -import { Environments } from '/imports/api/environments/environments'; -import { LinkTypes } from '/imports/api/link-types/link-types'; - -export const CliqueTypes = new Mongo.Collection( - 'clique_types', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - - environment: { - type: String, - custom: function () { - let that = this; - let env = Environments.findOne({ name: that.value }); - - if (R.isNil(env)) { - return 'notAllowed'; - } - } - }, - - focal_point_type: { - type: String, - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'object_types_for_links' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - } - }, - - link_types: { - type: [String], - minCount: 1, - defaultValue: [], - custom: function () { - let that = this; - let findResult = R.all(function (pLinkType) { - if (R.isNil(LinkTypes.findOne({ type: pLinkType }))) { - return false; - } - - return true; - }, that.value); - - if (! findResult) { return 'notAllowed'; } - - return; - }, - }, - - name: { - type: String - }, -}; - -let simpleSchema = new SimpleSchema(schema); - -simpleSchema.addValidator(function () { - let that = this; - - let existing = CliqueTypes.findOne({ - environment: that.field('environment').value, - focal_point_type: that.field('focal_point_type').value - }); - - if (R.allPass([ - R.pipe(R.isNil, R.not), - R.pipe(R.propEq('_id', that.docId), R.not) - ])(existing)) { - - return 'alreadyExists'; - } -}); - -simpleSchema.addValidator(function () { - let that = this; - - let existing = CliqueTypes.findOne({ - environment: that.field('environment').value, - name: that.field('name').value - }); - - if (R.allPass([ - R.pipe(R.isNil, R.not), - R.pipe(R.propEq('_id', that.docId), R.not) - ])(existing)) { - - return 'alreadyExists'; - } -}); - -CliqueTypes.schema = simpleSchema; -CliqueTypes.attachSchema(CliqueTypes.schema); diff --git a/ui/imports/api/clique-types/methods.js b/ui/imports/api/clique-types/methods.js deleted file mode 100644 index 4257291..0000000 --- a/ui/imports/api/clique-types/methods.js +++ /dev/null @@ -1,108 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; - -import { CliqueTypes } from './clique-types'; - -export const insert = new ValidatedMethod({ - name: 'clique_types.insert', - validate: CliqueTypes.simpleSchema() - .pick([ - 'environment', - 'focal_point_type', - 'link_types', - 'link_types.$', - 'name', - ]).validator({ clean: true, filter: false }), - run({ - environment, - focal_point_type, - link_types, - name, - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for adding clique type'); - } - - let cliqueType = CliqueTypes.schema.clean({}); - - cliqueType = R.merge(cliqueType, { - environment, - focal_point_type, - link_types, - name, - }); - - CliqueTypes.insert(cliqueType); - } -}); - -export const remove = new ValidatedMethod({ - name: 'clique_types.remove', - validate: CliqueTypes.simpleSchema() - .pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id - }) { - - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for removing clique type'); - } - - let cliqueType = CliqueTypes.findOne({ _id: _id }); - console.log('clique type for remove: ', cliqueType); - - CliqueTypes.remove({ _id: _id }); - } -}); - -export const update = new ValidatedMethod({ - name: 'clique_types.update', - validate: CliqueTypes.simpleSchema() - .pick([ - '_id', - 'environment', - 'focal_point_type', - 'link_types', - 'link_types.$', - 'name', - ]).validator({ clean: true, filter: false }), - run({ - _id, - environment, - focal_point_type, - link_types, - name, - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for updating clique type'); - } - - let cliqueType = CliqueTypes.findOne({ _id: _id }); - console.log('clique type for remove: ', cliqueType); - - cliqueType = R.merge(R.pick([ - 'environment', - 'focal_point_type', - 'link_types', - 'name', ], - cliqueType), { - environment, - focal_point_type, - link_types, - name, - }); - - CliqueTypes.update({ _id: _id }, { $set: cliqueType }); - } -}); diff --git a/ui/imports/api/clique-types/server/publications.js b/ui/imports/api/clique-types/server/publications.js deleted file mode 100644 index 95274b9..0000000 --- a/ui/imports/api/clique-types/server/publications.js +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; - -import { CliqueTypes } from '../clique-types.js'; - -Meteor.publish('clique_types?env*', function (env) { - console.log('server subscribtion: clique_types?env*'); - console.log(env); - - //let that = this; - - let query = {}; - if (! R.isNil(env)) { query = R.assoc('environment', env, query); } - console.log('-query: ', query); - return CliqueTypes.find(query); -}); - -Meteor.publish('clique_types?_id', function (_id) { - console.log('server subscribtion: clique_types?_id'); - console.log(_id); - - //let that = this; - - let query = { _id: _id }; - return CliqueTypes.find(query); -}); diff --git a/ui/imports/api/cliques/cliques.js b/ui/imports/api/cliques/cliques.js deleted file mode 100644 index 78fb7ad..0000000 --- a/ui/imports/api/cliques/cliques.js +++ /dev/null @@ -1,12 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; - -export const Cliques = new Mongo.Collection( - 'cliques', { idGeneration: 'MONGO' }); diff --git a/ui/imports/api/cliques/methods.js b/ui/imports/api/cliques/methods.js deleted file mode 100644 index 1eda375..0000000 --- a/ui/imports/api/cliques/methods.js +++ /dev/null @@ -1,8 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// diff --git a/ui/imports/api/cliques/server/publications.js b/ui/imports/api/cliques/server/publications.js deleted file mode 100644 index 16a4644..0000000 --- a/ui/imports/api/cliques/server/publications.js +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; - -import { Cliques } from '../cliques.js'; - -Meteor.publish('cliques', function () { - console.log('server subscribtion to: cliques'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - return Cliques.find({}); -}); - -Meteor.publish('cliques?focal_point', function (objId) { - var query = { - focal_point: new Mongo.ObjectID(objId) - }; -/* - var counterName = 'inventory?env+type!counter?env=' + env + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); -*/ - - console.log('server subscribtion to: cliques?focal_point'); - console.log('- focal_point: ' + objId); - return Cliques.find(query); -}); diff --git a/ui/imports/api/connection-tests/connection-tests.js b/ui/imports/api/connection-tests/connection-tests.js deleted file mode 100644 index 7acb549..0000000 --- a/ui/imports/api/connection-tests/connection-tests.js +++ /dev/null @@ -1,41 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import * as R from 'ramda'; - -export const ConnectionTests = new Mongo.Collection('connection_tests', { idGeneration: 'MONGO' }); - -let simpleSchema = new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - environment: { - type: String, - }, - - test_targets: { - type: [String], - }, - - test_configurations: { - type: [Object], - blackbox: true - }, - - submit_timestamp: { - type: String, - }, - - status: { - type: String, - defaultValue: 'request' - } -}); - -ConnectionTests.schema = simpleSchema; -ConnectionTests.attachSchema(ConnectionTests.schema); diff --git a/ui/imports/api/connection-tests/methods.js b/ui/imports/api/connection-tests/methods.js deleted file mode 100644 index 7badfb1..0000000 --- a/ui/imports/api/connection-tests/methods.js +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// - -import * as R from 'ramda'; -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import { ConnectionTests } from './connection-tests'; -import { getSchemaForGroupName } from '/imports/api/environments/environments'; - -export const insert = new ValidatedMethod({ - name: 'connection_tests.insert', - validate: ConnectionTests.simpleSchema() - .pick([ - 'environment', - 'test_configurations', - 'test_configurations.$', - ]).validator({ clean: true, filter: false }), - run({ - environment, - test_configurations, - }) { - let connection_test = ConnectionTests.schema.clean({}); - - test_configurations = R.filter((config) => { - let validationContext = getSchemaForGroupName(config.name).newContext(); - try { - let result = validationContext.validate(config); - return result; - } catch (_e) { - return false; - } - }, test_configurations); - - let test_targets = R.map((config) => config.name, test_configurations); - let submit_timestamp = moment().format(); - - connection_test = R.merge(connection_test, { - environment, - test_targets, - test_configurations, - submit_timestamp - }); - - let insertResult = ConnectionTests.insert(connection_test); - return insertResult; - }, -}); diff --git a/ui/imports/api/connection-tests/server/publications.js b/ui/imports/api/connection-tests/server/publications.js deleted file mode 100644 index 4a092b5..0000000 --- a/ui/imports/api/connection-tests/server/publications.js +++ /dev/null @@ -1,21 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { ConnectionTests } from '../connection-tests.js'; - -Meteor.publish('connection_tests?_id', function (_id) { - console.log('server subscribtion to: connection_tests?_id'); - console.log('-_id: ', R.toString(_id)); - - let query = { - _id: _id, - }; - return ConnectionTests.find(query); -}); diff --git a/ui/imports/api/constants/constants.js b/ui/imports/api/constants/constants.js deleted file mode 100644 index b3f0407..0000000 --- a/ui/imports/api/constants/constants.js +++ /dev/null @@ -1,22 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import * as R from 'ramda'; - -export const Constants = new Mongo.Collection('constants', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - name: { type: String }, - data: { type: [Object], blackbox: true }, -}; - -Constants.schema = schema; -Constants.attachSchema(schema); diff --git a/ui/imports/api/constants/data/distributions.js b/ui/imports/api/constants/data/distributions.js deleted file mode 100644 index 97ecdb4..0000000 --- a/ui/imports/api/constants/data/distributions.js +++ /dev/null @@ -1,64 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const Distributions = [{ - label: 'Mirantis-6.0', - value: 'Mirantis-6.0', -}, { - label: 'Mirantis-7.0', - value: 'Mirantis-7.0', -}, { - label: 'Mirantis-8.0', - value: 'Mirantis-8.0', -}, { - label: 'Mirantis-9.0', - value: 'Mirantis-9.0', -}, { - label: 'RDO-Mitaka', - value: 'RDO-Mitaka', -}, { - label: 'RDO-Liberty', - value: 'RDO-Liberty', -}, { - label: 'RDO-Juno', - value: 'RDO-Juno', -}, { - label: 'RDO-kilo', - value: 'RDO-kilo', -}, { - label: 'devstack-liberty', - value: 'devstack-liberty', -}, { - label: 'Canonical-icehouse', - value: 'Canonical-icehouse', -}, { - label: 'Canonical-juno', - value: 'Canonical-juno', -}, { - label: 'Canonical-liberty', - value: 'Canonical-liberty', -}, { - label: 'Canonical-mitaka', - value: 'Canonical-mitaka', -}, { - label: 'Apex-Mitaka', - value: 'Apex-Mitaka', -}, { - label: 'Devstack-Mitaka', - value: 'Devstack-Mitaka', -}, { - label: 'packstack-7.0.0-0.10.dev1682', - value: 'packstack-7.0.0-0.10.dev1682', -}, { - label: 'Stratoscale-v2.1.6', - value: 'Stratoscale-v2.1.6', -}, { - label: 'Mirantis-9.1', - value: 'Mirantis-9.1', -} -]; diff --git a/ui/imports/api/constants/data/env-types.js b/ui/imports/api/constants/data/env-types.js deleted file mode 100644 index 00b0aaf..0000000 --- a/ui/imports/api/constants/data/env-types.js +++ /dev/null @@ -1,15 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const EnvTypes = [{ - label: 'Production', - value: 'production', -}, { - label: 'Development', - value: 'development', -}]; diff --git a/ui/imports/api/constants/data/environment-monitoring-types.js b/ui/imports/api/constants/data/environment-monitoring-types.js deleted file mode 100644 index e3a573a..0000000 --- a/ui/imports/api/constants/data/environment-monitoring-types.js +++ /dev/null @@ -1,12 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const EnvironmentMonitoringTypes = [{ - label: 'Sensu', - value: 'Sensu', -}]; diff --git a/ui/imports/api/constants/data/environment-provision-types.js b/ui/imports/api/constants/data/environment-provision-types.js deleted file mode 100644 index 5139266..0000000 --- a/ui/imports/api/constants/data/environment-provision-types.js +++ /dev/null @@ -1,21 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const EnvProvisionTypes = [{ - label: 'None', - value: 'None', -}, { - label: 'Deploy', - value: 'Deploy', -}, { - label: 'Files', - value: 'Files', -}, { - label: 'DB', - value: 'DB', -}]; diff --git a/ui/imports/api/constants/data/log-levels.js b/ui/imports/api/constants/data/log-levels.js deleted file mode 100644 index dee6b6d..0000000 --- a/ui/imports/api/constants/data/log-levels.js +++ /dev/null @@ -1,27 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const LogLevels = [{ - label: 'CRITICAL', - value: 'critical', -}, { - label: 'ERROR', - value: 'error', -}, { - label: 'WARNING', - value: 'warning', -}, { - label: 'INFO', - value: 'info', -}, { - label: 'DEBUG', - value: 'debug', -}, { - label: 'NOTSET', - value: 'notset', -}]; diff --git a/ui/imports/api/constants/data/mechanism-drivers.js b/ui/imports/api/constants/data/mechanism-drivers.js deleted file mode 100644 index afa8b01..0000000 --- a/ui/imports/api/constants/data/mechanism-drivers.js +++ /dev/null @@ -1,24 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const MechanismDrivers = [{ - 'label' : 'ovs', - 'value' : 'ovs' -}, { - 'label' : 'vpp', - 'value' : 'vpp' -}, { - 'label' : 'lxb', - 'value' : 'lxb' -}, { - 'label' : 'Arista', - 'value' : 'Arista' -}, { - 'label' : 'Nexus', - 'value' : 'Nexus' -}]; diff --git a/ui/imports/api/constants/data/message-source-systems.js b/ui/imports/api/constants/data/message-source-systems.js deleted file mode 100644 index 77ec901..0000000 --- a/ui/imports/api/constants/data/message-source-systems.js +++ /dev/null @@ -1,15 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const MessageSourceSystems = [{ - label: 'OpenStack', - value: 'OpenStack', -}, { - label: 'OSDNA_Sensu', - value: 'OSDNA_Sensu', -}]; diff --git a/ui/imports/api/constants/data/network-plugins.js b/ui/imports/api/constants/data/network-plugins.js deleted file mode 100644 index c89be26..0000000 --- a/ui/imports/api/constants/data/network-plugins.js +++ /dev/null @@ -1,15 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const NetworkPlugins = [{ - label: 'OVS', - value: 'OVS', -}, { - label: 'VPP', - value: 'VPP', -}]; diff --git a/ui/imports/api/constants/data/object-types-for-links.js b/ui/imports/api/constants/data/object-types-for-links.js deleted file mode 100644 index 35f1805..0000000 --- a/ui/imports/api/constants/data/object-types-for-links.js +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const ObjectTypesForLinks = [{ - label: 'vnic', - value: 'vnic', -}, { - label: 'vconnector', - value: 'vconnector', -}, { - label: 'vedge', - value: 'vedge', -}, { - label: 'instance', - value: 'instance', -}, { - label: 'vservice', - value: 'vservice', -}, { - label: 'pnic', - value: 'pnic', -}, { - label: 'network', - value: 'network', -}, { - label: 'port', - value: 'port', -}, { - label: 'otep', - value: 'otep', -}, { - label: 'agent', - value: 'agent', -}]; diff --git a/ui/imports/api/constants/data/scans-statuses.js b/ui/imports/api/constants/data/scans-statuses.js deleted file mode 100644 index d61c8f3..0000000 --- a/ui/imports/api/constants/data/scans-statuses.js +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const Statuses = [{ - value: 'draft', - label: 'Draft', -}, { - value: 'pending', - label: 'Pending', -}, { - value: 'running', - label: 'Running', -}, { - value: 'completed', - label: 'Completed', -}, { - value: 'completed_with_errors', - label: 'Completed with errors', -}, { - value: 'failed', - label: 'Failed', -}, { - value: 'aborted', - label: 'Aborted', -} -]; - -export const StatusesInOperation = ['pending', 'running']; diff --git a/ui/imports/api/constants/data/type-drivers.js b/ui/imports/api/constants/data/type-drivers.js deleted file mode 100644 index efc7f7d..0000000 --- a/ui/imports/api/constants/data/type-drivers.js +++ /dev/null @@ -1,24 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const TypeDrivers = [{ - 'label' : 'local', - 'value' : 'local' -}, { - 'label' : 'vlan', - 'value' : 'vlan' -}, { - 'label' : 'vxlan', - 'value' : 'vxlan' -}, { - 'label' : 'gre', - 'value' : 'gre' -}, { - 'label' : 'flat', - 'value' : 'flat' -}]; diff --git a/ui/imports/api/constants/server/publications.js b/ui/imports/api/constants/server/publications.js deleted file mode 100644 index 3ace17f..0000000 --- a/ui/imports/api/constants/server/publications.js +++ /dev/null @@ -1,16 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; - -import { Constants } from '../constants.js'; - -Meteor.publish('constants', function () { - console.log('server subscribtion to: constants'); - return Constants.find({}); -}); diff --git a/ui/imports/api/environments/configuration-groups/aci-configuration.js b/ui/imports/api/environments/configuration-groups/aci-configuration.js deleted file mode 100644 index dd2c089..0000000 --- a/ui/imports/api/environments/configuration-groups/aci-configuration.js +++ /dev/null @@ -1,29 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -export const AciSchema = new SimpleSchema({ - name: { - type: String, - autoValue: function () { return 'ACI'; } - }, - host: { - type: String, - regEx: SimpleSchema.RegEx.IP, - defaultValue: '10.0.0.1', - }, - user: { - type: String, - defaultValue: 'admin' - }, - pwd: { - type: String, - defaultValue: '123456' - }, -}); diff --git a/ui/imports/api/environments/configuration-groups/amqp-configuration.js b/ui/imports/api/environments/configuration-groups/amqp-configuration.js deleted file mode 100644 index 7b7ddaf..0000000 --- a/ui/imports/api/environments/configuration-groups/amqp-configuration.js +++ /dev/null @@ -1,29 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { portRegEx } from '/imports/lib/general-regex'; - -export const AMQPSchema = new SimpleSchema({ - name: { type: String, autoValue: function () { return 'AMQP'; } }, - host: { - type: String, - regEx: SimpleSchema.RegEx.IP, - defaultValue: '10.0.0.1', - }, - port: { - type: String, - regEx: portRegEx, - defaultValue: '5673', - }, - user: { - type: String, - defaultValue: 'rabbitmquser' - }, - pwd: { type: String }, -}); diff --git a/ui/imports/api/environments/configuration-groups/cli-configuration.js b/ui/imports/api/environments/configuration-groups/cli-configuration.js deleted file mode 100644 index c651359..0000000 --- a/ui/imports/api/environments/configuration-groups/cli-configuration.js +++ /dev/null @@ -1,69 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { pathRegEx } from '/imports/lib/general-regex'; - -export const CLISchema = new SimpleSchema({ - name: { type: String, autoValue: function () { return 'CLI'; } }, - host: { - type: String, - defaultValue: '10.0.0.1' - }, - key: { - type: String, - regEx: pathRegEx, - optional: true - }, - user: { - type: String, - defaultValue: 'sshuser' - }, - pwd: { - type: String, - optional: true - }, -}); - -CLISchema.addValidator(function () { - let that = this; - - let conf = {}; - if (isConfEmpty(conf)) { - return; - } - - let validationResult = R.find((validationFn) => { - return validationFn(that).isError; - }, [ keyPasswordValidation ]); - - if (R.isNil(validationResult)) { return; } - - throw validationResult(that); -}); - -function keyPasswordValidation(schemaItem) { - let password = schemaItem.field('pwd'); - let key = schemaItem.field('key'); - - if (key.value || password.value) { return { isError: false }; } - - return { - isError: true, - type: 'subGroupError', - data: [], - message: 'Master Host Group: At least one required: key or password' - }; -} - -function isConfEmpty(conf) { - return R.find((key) => { - return !(R.isNil(conf[key])); - }, R.keys(conf)); -} diff --git a/ui/imports/api/environments/configuration-groups/monitoring-configuration.js b/ui/imports/api/environments/configuration-groups/monitoring-configuration.js deleted file mode 100644 index edeaaad..0000000 --- a/ui/imports/api/environments/configuration-groups/monitoring-configuration.js +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Constants } from '/imports/api/constants/constants'; -import { portRegEx } from '/imports/lib/general-regex'; -import { hostnameRegex } from '/imports/lib/general-regex'; -import { ipAddressRegex } from '/imports/lib/general-regex'; -import { pathRegEx } from '/imports/lib/general-regex'; - -export const MonitoringSchema = new SimpleSchema({ - name: { type: String, autoValue: function () { return 'Monitoring'; } }, - //app_path: { type: String, autoValue: function () { return '/etc/calipso/monitoring'; } }, - - config_folder: { - type: String, - defaultValue: '/local_dir/sensu_config', - regEx: pathRegEx, - }, - - env_type: { - type: String, - defaultValue: 'production', - custom: function () { - let that = this; - let EnvTypesRec = Constants.findOne({ name: 'env_types' }); - - if (R.isNil(EnvTypesRec.data)) { return 'notAllowed'; } - let EnvTypes = EnvTypesRec.data; - - if (R.isNil(R.find(R.propEq('value', that.value), EnvTypes))) { - return 'notAllowed'; - } - }, - }, - - rabbitmq_port: { - type: String, - defaultValue: '5671', - regEx: portRegEx, - }, - - rabbitmq_user: { - type: String, - defaultValue: 'sensu' - }, - - rabbitmq_pass: { - type: String, - defaultValue: 'osdna' - }, - - server_ip: { - type: String, - regEx: new RegExp(hostnameRegex.source + '|' + ipAddressRegex.soure), - defaultValue: '10.0.0.1', - }, - - server_name: { - type: String, - defaultValue: 'sensu_server', - }, - - type: { - type: String, - defaultValue: 'Sensu', - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'environment_monitoring_types' }).data; - - if (R.isNil(values)) { return 'notAllowed'; } - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - }, - }, - - provision: { - type: String, - defaultValue: 'None', - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'environment_provision_types' }).data; - - if (R.isNil(values)) { return 'notAllowed'; } - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - }, - }, - - ssh_port: { - type: String, - defaultValue: '20022', - optional: true - }, - - ssh_user: { - type: String, - defaultValue: 'root', - optional: true - }, - - ssh_password: { - type: String, - defaultValue: 'osdna', - optional: true - }, - - api_port: { - type: Number, - defaultValue: 4567, - }, -}); diff --git a/ui/imports/api/environments/configuration-groups/mysql-configuration.js b/ui/imports/api/environments/configuration-groups/mysql-configuration.js deleted file mode 100644 index 97eab29..0000000 --- a/ui/imports/api/environments/configuration-groups/mysql-configuration.js +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { portRegEx } from '/imports/lib/general-regex'; - -export const MysqlSchema = new SimpleSchema({ - name: { - type: String, - autoValue: function () { return 'mysql'; } - }, - host: { - type: String, - regEx: SimpleSchema.RegEx.IP, - defaultValue: '10.0.0.1' - }, - pwd: { type: String }, - port: { - type: String, - regEx: portRegEx, - defaultValue: '3307' - }, - user: { - type: String, - min: 3, - defaultValue: 'mysqluser' - }, -}); diff --git a/ui/imports/api/environments/configuration-groups/nfv-provider-configuration.js b/ui/imports/api/environments/configuration-groups/nfv-provider-configuration.js deleted file mode 100644 index 3638e3b..0000000 --- a/ui/imports/api/environments/configuration-groups/nfv-provider-configuration.js +++ /dev/null @@ -1,25 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { portRegEx } from '/imports/lib/general-regex'; - -export const NfvProviderSchema = new SimpleSchema({ - name: { type: String, autoValue: function () { return 'NFV_provider'; } }, - host: { - type: String, - regEx: SimpleSchema.RegEx.IP, - }, - nfv_token: { type: String }, - port: { - type: String, - regEx: portRegEx - }, - user: { type: String }, - pwd: { type: String }, -}); diff --git a/ui/imports/api/environments/configuration-groups/open-stack-configuration.js b/ui/imports/api/environments/configuration-groups/open-stack-configuration.js deleted file mode 100644 index a0d710f..0000000 --- a/ui/imports/api/environments/configuration-groups/open-stack-configuration.js +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { portRegEx } from '/imports/lib/general-regex'; - -export const OpenStackSchema = new SimpleSchema({ - name: { type: String, autoValue: function () { return 'OpenStack'; } }, - host: { - type: String, - regEx: SimpleSchema.RegEx.IP, - defaultValue: '10.0.0.1', - }, - admin_token: { type: String }, - port: { - type: String, - regEx: portRegEx, - defaultValue: '5000', - }, - user: { - type: String, - defaultValue: 'adminuser' - }, - pwd: { type: String }, -}); diff --git a/ui/imports/api/environments/environments.js b/ui/imports/api/environments/environments.js deleted file mode 100644 index e196a69..0000000 --- a/ui/imports/api/environments/environments.js +++ /dev/null @@ -1,472 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Constants } from '/imports/api/constants/constants'; -import { MysqlSchema } from './configuration-groups/mysql-configuration'; -import { OpenStackSchema } from './configuration-groups/open-stack-configuration'; -import { MonitoringSchema } from './configuration-groups/monitoring-configuration'; -import { CLISchema } from './configuration-groups/cli-configuration'; -import { AMQPSchema } from './configuration-groups/amqp-configuration'; -//import { NfvProviderSchema } from './configuration-groups/nfv-provider-configuration'; -import { AciSchema } from './configuration-groups/aci-configuration'; -import { - isMonitoringSupported, - isListeningSupported, -} from '/imports/api/supported_environments/supported_environments'; - -export const Environments = new Mongo.Collection( - 'environments_config', { idGeneration: 'MONGO' }); - -export const requiredConfGroups = [ - 'mysql', - 'OpenStack', - 'CLI', -]; - -export const optionalConfGroups = [ - // 'NFV_provider', - 'AMQP', - 'Monitoring', - 'ACI', -]; - -let simpleSchema = new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - auth: { - type: Object, - blackbox: true, - defaultValue: { - 'view-env': [ - ], - 'edit-env': [ - ] - } - }, - configuration: { - type: [Object], - blackbox: true, - autoValue: function () { - console.log('start - autovalue - environment - configuration'); - //console.log(this); - let that = this; - - if (that.isSet) { - let confGroups = that.value; - - let { - isMonitoringSupportedRes, - isListeningSupportedRes, - enable_monitoring, - listen - } = extractCalcEnvSupportedRelatedValues(that); - let dbNode = getDbNode(that); - let aci_enabled = extractValue('aci_enabled', that, dbNode); - - if (enable_monitoring && isMonitoringSupportedRes) { - if (! R.find(R.propEq('name', 'Monitoring'), confGroups)) { - confGroups = R.append(createNewConfGroup('Monitoring'), confGroups); - } - } else { - console.log('env - configurations - autovalue - monitoring not supported'); - confGroups = R.reject(R.propEq('name', 'Monitoring'), confGroups); - } - - if (listen && isListeningSupportedRes) { - if (! R.find(R.propEq('name', 'AMQP'), confGroups)) { - confGroups = R.append(createNewConfGroup('AMQP'), confGroups); - } - } else { - console.log('env - configurations - autovalue - listening not supported'); - confGroups = R.reject(R.propEq('name', 'AMQP'), confGroups); - } - - if (aci_enabled) { - if (! R.find(R.propEq('name', 'ACI'), confGroups)) { - confGroups = R.append(createNewConfGroup('ACI'), confGroups); - } - } else { - console.log('env - configurations - autovalue - aci not requested'); - confGroups = R.reject(R.propEq('name', 'ACI'), confGroups); - } - - confGroups = cleanOptionalGroups(confGroups, optionalConfGroups); - console.log('env - configurations - autovalue - after clean optional groups'); - - let newValue = R.map(function(confGroup) { - let schema = getSchemaForGroupName(confGroup.name); - return schema.clean(confGroup); - }, confGroups); - - console.log('end - autovalue - environment - configurations'); - console.log(newValue); - return newValue; - - } else { - console.log('env - configurations - autovalue - is not set'); - let newValue = R.map((confName) => { - let schema = getSchemaForGroupName(confName); - return schema.clean({}); - }, requiredConfGroups); - console.log('end - autovalue - environment - configurations'); - console.log(newValue); - return newValue; - } - }, - custom: function () { - console.log('start - custom - environment - configurations'); - //console.log(this); - let that = this; - let configurationGroups = that.value; - - let subErrors = []; - - let { - isMonitoringSupportedRes, - isListeningSupportedRes, - enable_monitoring, - listen - } = extractCalcEnvSupportedRelatedValues(that); - - let requiredConfGroupsTemp = R.clone(requiredConfGroups); - if (enable_monitoring && isMonitoringSupportedRes) { - requiredConfGroupsTemp = R.append('Monitoring', requiredConfGroupsTemp); - } - if (listen && isListeningSupportedRes) { - requiredConfGroupsTemp = R.append('AMQP', requiredConfGroupsTemp); - } - - console.log('env - configurations - custom - after mon & listen check'); - - let invalidResult = R.find(function(groupName) { - subErrors = checkGroup(groupName, configurationGroups, true); - if (subErrors.length > 0) { return true; } - return false; - }, requiredConfGroupsTemp); - - console.log(`env - configurations - custom - after require groups check`); - - if (R.isNil(invalidResult)) { - invalidResult = R.find(function(groupName) { - subErrors = checkGroup(groupName, configurationGroups, false); - if (subErrors.length > 0) { return true; } - return false; - }, optionalConfGroups); - } - - console.log(`env - configurations - custom - after optional groups check`); - - if (! R.isNil(invalidResult)) { - console.log(`env - configrations - custom - invalid result end: ${R.toString(subErrors)}`); - throw { - isError: true, - type: 'subGroupError', - data: subErrors, - message: constructSubGroupErrorMessage(subErrors) - }; - } - }, - - }, - user: { - type: String, - }, - distribution: { - type: String, - defaultValue: 'Mirantis', - custom: function () { - let that = this; - let constsDist = Constants.findOne({ name: 'distributions' }); - - if (R.isNil(constsDist.data)) { return 'notAllowed'; } - let distributions = constsDist.data; - - if (R.isNil(R.find(R.propEq('value', that.value), distributions))) { - return 'notAllowed'; - } - }, - }, - distribution_version: { - type: String, - custom: function () { - let that = this; - let constsDist = Constants.findOne({ name: 'distribution_versions' }); - - if (R.isNil(constsDist.data)) { return 'notAllowed'; } - let dist_versions = constsDist.data; - - if (R.isNil(R.find(R.propEq('value', that.value), dist_versions))) { - return 'notAllowed'; - } - }, - }, - last_scanned: { - type: String, defaultValue: '' - }, - name: { - type: String, - defaultValue: 'MyEnvironmentName', - min: 6, - }, - type_drivers: { - type: String, - defaultValue: 'gre', - custom: function () { - let that = this; - let TypeDriversRec = Constants.findOne({ name: 'type_drivers' }); - - if (R.isNil(TypeDriversRec.data)) { return 'notAllowed'; } - let TypeDrivers = TypeDriversRec.data; - - if (R.isNil(R.find(R.propEq('value', that.value), TypeDrivers))) { - return 'notAllowed'; - } - }, - }, - - mechanism_drivers: { - type: [String], - defaultValue: ['OVS'], - minCount: 1, - custom: function () { - let that = this; - let consts = Constants.findOne({ name: 'mechanism_drivers' }); - - if (R.isNil(consts.data)) { return 'notAllowed'; } - let mechanismDrivers = consts.data; - - let result = R.find((driver) => { - if (R.find(R.propEq('value', driver), mechanismDrivers)) { - return false; - } - return true; - }, that.value); - - if (result) { return 'notAllowed'; } - - }, - }, - - operational: { - type: String, - allowedValues: ['stopped', 'running', 'error'], - defaultValue: 'stopped' - }, - - scanned: { type: Boolean, defaultValue: false }, - - type: { - type: String, - autoValue: function () { - return 'environment'; - }, - }, - - app_path: { - type: String, - autoValue: function () { - return '/home/scan/calipso_prod/app'; - } - }, - - listen: { - type: Boolean, - autoValue: function () { - console.log('env - listen - autoValue - start'); - let that = this; - let newValue = that.value; - console.log(`- current value: ${R.toString(newValue)}`); - - let { isListeningSupportedRes } = extractCalcEnvSupportedRelatedValues(that); - - if (!isListeningSupportedRes) { - console.log('* listening not supported'); - console.log(`* ${R.toString(isListeningSupportedRes)}`); - newValue = false; - } - - return newValue; - }, - }, - - enable_monitoring: { - type: Boolean, - autoValue: function () { - console.log('env - enable_monitoring - autoValue - start'); - let that = this; - let newValue = that.value; - console.log(`- current value: ${R.toString(newValue)}`); - - let { isMonitoringSupportedRes } = extractCalcEnvSupportedRelatedValues(that); - - if (!isMonitoringSupportedRes) { - console.log('* monitoring not supported'); - console.log(`* ${R.toString(isMonitoringSupportedRes)}`); - newValue = false; - } - - return newValue; - }, - }, - aci_enabled: { - type: Boolean, - defaultValue: false, - }, -}); - -/* -simpleSchema.addValidator(function () { - //let that = this; -}); -*/ - -// Bug in simple schema. cant add custom message to instance specific -// schema. -// https://github.com/aldeed/meteor-simple-schema/issues/559 -// Version 2 fixes it but it is rc. -//Environments.schema.messages({ -SimpleSchema.messages({ - confGroupInvalid: 'Configuration group is invalid.' -}); - -Environments.schema = simpleSchema; -Environments.attachSchema(Environments.schema); - -export function getSchemaForGroupName(groupName) { - switch (groupName) { - case 'mysql': - return MysqlSchema; - case 'OpenStack': - return OpenStackSchema; - case 'CLI': - return CLISchema; - case 'AMQP': - return AMQPSchema; - // case 'NFV_provider': - // return NfvProviderSchema; - case 'ACI': - return AciSchema; - case 'Monitoring': - return MonitoringSchema; - default: - throw 'group name is not recognized. group: ' + groupName; - } -} - -function constructSubGroupErrorMessage(errors) { - let message = 'Validation errors on sub groups:'; - message = message + R.reduce((acc, item) => { - return acc + '\n- ' + item.group + ': ' + item.message; - }, '', errors); - - return message; -} - -function checkGroup(groupName, configurationGroups, groupRequired) { - let subErrors = []; - let confGroup = R.find(R.propEq('name', groupName), configurationGroups); - - if (R.isNil(confGroup)) { - if (groupRequired) { - subErrors = R.append({ - field: 'configuration', - group: groupName, - message: 'group ' + groupName + ' is required' - }, subErrors); - } - return subErrors; - } - - let validationContext = getSchemaForGroupName(groupName).newContext(); - - if (! validationContext.validate(confGroup)) { - subErrors = R.reduce(function (acc, invalidField) { - return R.append({ - field: invalidField, - group: groupName, - message: validationContext.keyErrorMessage(invalidField.name), - }, acc); - }, [], validationContext.invalidKeys()); - - return subErrors; - } - - return subErrors; -} - -export function createNewConfGroup(groupName) { - let schema = getSchemaForGroupName(groupName); - return schema.clean({}); -} - -function cleanOptionalGroups(confGroups, optionalConfGroups) { - return R.filter((conf) => { - if (R.contains(conf.name, optionalConfGroups)) { - return !isConfEmpty(conf); - } - - return true; - }, confGroups); -} - -function isConfEmpty(conf) { - return ! R.any((key) => { - if (key === 'name') { return false; } // We ignore the key 'name'. It is a 'type' key. - let val = conf[key]; - return ! ( R.isNil(val) || R.isEmpty(val)); - })(R.keys(conf)); -} - -function extractValue(name, schemaValidator, dbNode) { - console.log('env - extract value'); - console.log(`-name: ${R.toString(name)}`); - //console.log(`-schemaValidator: ${R.toString(schemaValidator)}`); - console.log(`-dbNode: ${R.toString(dbNode)}`); - - let field = schemaValidator.field(name); - let value = field.value; - - console.log(`extract value - schema value: ${R.toString(value)}`); - - if (R.isNil(field.value) && !field.isSet && dbNode) { - console.log(`extract value - db value: ${R.toString(dbNode[name])}`); - value = dbNode[name]; - } - - console.log(`extract value - result: ${R.toString(value)}`); - return value; -} - -function getDbNode(schemaHelper) { - let _id = R.defaultTo(schemaHelper.docId, R.path(['value'], schemaHelper.field('_id'))); - let dbNode = R.defaultTo(null, Environments.findOne({ _id: _id })); - return dbNode; -} - -function extractCalcEnvSupportedRelatedValues(schemaHelper) { - let dbNode = getDbNode(schemaHelper); - - let dist = extractValue('distribution', schemaHelper, dbNode); - let dist_version = extractValue('distribution_version', schemaHelper, dbNode); - let typeDrivers = extractValue('type_drivers', schemaHelper, dbNode); - let mechDrivers = extractValue('mechanism_drivers', schemaHelper, dbNode); - let enable_monitoring = extractValue('enable_monitoring', schemaHelper, dbNode); - let listen = extractValue('listen', schemaHelper, dbNode); - - let isMonitoringSupportedRes = isMonitoringSupported(dist, dist_version, typeDrivers, mechDrivers); - let isListeningSupportedRes = isListeningSupported(dist, dist_version, typeDrivers, mechDrivers); - - return { - enable_monitoring, - listen, - isMonitoringSupportedRes, - isListeningSupportedRes, - }; -} diff --git a/ui/imports/api/environments/methods.js b/ui/imports/api/environments/methods.js deleted file mode 100644 index 66d1557..0000000 --- a/ui/imports/api/environments/methods.js +++ /dev/null @@ -1,157 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { ValidatedMethod } from 'meteor/mdg:validated-method'; - -//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -import { Environments } from './environments'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { Links } from '/imports/api/links/links'; -import { Cliques } from '/imports/api/cliques/cliques'; -import { CliqueTypes } from '/imports/api/clique-types/clique-types'; -import { Messages } from '/imports/api/messages/messages'; -import { Scans } from '/imports/api/scans/scans'; -import { Roles } from 'meteor/alanning:roles'; - -export const insert = new ValidatedMethod({ - name: 'environments.insert', - validate: Environments.simpleSchema() - .pick([ - 'configuration', - 'configuration.$', - 'distribution', - 'distribution_version', - 'name', - 'type_drivers', - 'mechanism_drivers', - 'mechanism_drivers.$', - 'listen', - 'enable_monitoring', - 'aci_enabled', - ]).validator({ clean: true, filter: false }), - //validate: null, - run({ - configuration, - distribution, - distribution_version, - name, - type_drivers, - mechanism_drivers, - listen, - enable_monitoring, - aci_enabled, - }) { - // todo: create clean object instance. - let environment = Environments.schema.clean({ - user: Meteor.userId() - }); - - let auth = { - 'view-env': [ - Meteor.userId() - ], - 'edit-env': [ - Meteor.userId() - ] - }; - - environment = R.merge(environment, { - configuration, - distribution, - distribution_version, - name, - type_drivers, - mechanism_drivers, - listen, - enable_monitoring, - auth, - aci_enabled, - }); - - Environments.insert(environment); - }, -}); - -export const update = new ValidatedMethod({ - name: 'environments.update', - validate: Environments.simpleSchema().pick([ - '_id', - 'configuration', - 'configuration.$', - //'distribution', - //'name', - 'type_drivers', - 'mechanism_drivers', - 'mechanism_drivers.$', - 'listen', - 'enable_monitoring', - 'aci_enabled', - ]).validator({ clean: true, filter: false }), - run({ - _id, - configuration, - //distribution, - //name, - type_drivers, - mechanism_drivers, - listen, - enable_monitoring, - aci_enabled, - }) { - let env = Environments.findOne({ _id: _id }); - - if (! Roles.userIsInRole(Meteor.userId(), 'edit-env', 'default-group')) { - if (! R.contains(Meteor.userId(), R.path(['auth', 'edit-env'], env) )) { - throw new Meteor.Error('not-auth', 'unauthorized for updating env'); - } - } - - Environments.update(_id, { - $set: { - configuration: configuration, - //distribution: distribution, - //name: name, - type_drivers, - mechanism_drivers, - listen, - enable_monitoring, - aci_enabled, - }, - }); - } -}); - -export const remove = new ValidatedMethod({ - name: 'environments.remove', - validate: Environments.simpleSchema().pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id, - }) { - const env = Environments.findOne({ _id: _id }); - console.log('environment for remove: ', env); - - if (! Roles.userIsInRole(Meteor.userId(), 'edit-env', 'default-group')) { - if (! R.contains(Meteor.userId(), R.path(['auth', 'edit-env'], env) )) { - throw new Meteor.Error('not-auth', 'unauthorized for updating env'); - } - } - - Inventory.remove({ environment: env.name }); - Links.remove({ environment: env.name }); - Cliques.remove({ environment: env.name }); - CliqueTypes.remove({ environment: env.name }); - Messages.remove({ environment: env.name }); - Scans.remove({ environment: env.name }); - Environments.remove({ _id: _id }); - } -}); diff --git a/ui/imports/api/environments/server/publications.js b/ui/imports/api/environments/server/publications.js deleted file mode 100644 index 667ee8e..0000000 --- a/ui/imports/api/environments/server/publications.js +++ /dev/null @@ -1,102 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; - -import { Environments } from '../environments.js'; - -Meteor.publish('environments_config', function () { - console.log('server subscribtion to: environments_config'); - let userId = this.userId; - - let query = { - type: 'environment', - }; - - if (! Roles.userIsInRole(userId, 'view-env', null)) { - query = R.merge(query, { - 'auth.view-env': { - $in: [ userId ] - } - }); - } - - console.log('-query: ', R.toString(query)); - return Environments.find(query); -}); - -const subsEnvViewEnvUserId = 'environments.view-env&userId'; -Meteor.publish(subsEnvViewEnvUserId, function (userId) { - console.log(`subscription - ${subsEnvViewEnvUserId} `); - console.log(`-userId: ${R.toString(userId)}`); - - let query = {}; - - let currentUser = this.userId; - if (! Roles.userIsInRole(currentUser, 'manage-users', Roles.GLOBAL_GROUP)) { - console.log(`* error: unauth`); - console.log(`- currentUser: ${R.toString(currentUser)}`); - this.error('unauthorized for this subscription'); - return; - } - - query = R.merge(query, { - 'auth.view-env': { - $in: [ userId ] - } - }); - - console.log(`* query: ${R.toString(query)}`); - return Environments.find(query); -}); - -const subsEnvEditEnvUserId = 'environments.edit-env&userId'; -Meteor.publish(subsEnvEditEnvUserId, function (userId) { - console.log(`subscription - ${subsEnvEditEnvUserId} `); - console.log(`-userId: ${R.toString(userId)}`); - let query = {}; - - let currentUser = this.userId; - if (! Roles.userIsInRole(currentUser, 'manage-users', Roles.GLOBAL_GROUP)) { - console.log(`* error: unauth`); - console.log(`- currentUser: ${R.toString(currentUser)}`); - this.error('unauthorized for this subscription'); - return; - } - - query = R.merge(query, { - 'auth.edit-env': { - $in: [ userId ] - } - }); - - console.log(`* query: ${R.toString(query)}`); - return Environments.find(query); -}); - -Meteor.publish('environments?name', function (name) { - console.log('server subscribtion to: environments?name=' + name.toString()); - let query = { - name: name, - user: this.userId - }; - return Environments.find(query); -}); - -Meteor.publish('environments?_id', function (_id) { - console.log('server subscribtion to: environments?_id'); - console.log('-_id: ', R.toString(_id)); - - let query = { - _id: _id, - user: this.userId - }; - return Environments.find(query); -}); diff --git a/ui/imports/api/inventories/inventories.js b/ui/imports/api/inventories/inventories.js deleted file mode 100644 index 114f5ef..0000000 --- a/ui/imports/api/inventories/inventories.js +++ /dev/null @@ -1,11 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; - -export const Inventory = new Mongo.Collection('inventory', { idGeneration: 'MONGO' }); diff --git a/ui/imports/api/inventories/server/methods.js b/ui/imports/api/inventories/server/methods.js deleted file mode 100644 index d7e3648..0000000 --- a/ui/imports/api/inventories/server/methods.js +++ /dev/null @@ -1,137 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { check } from 'meteor/check'; -import * as R from 'ramda'; -import { Inventory } from '../inventories'; -import { Environments } from '/imports/api/environments/environments'; -import { regexEscape } from '/imports/lib/regex-utils'; -import { NodeHoverAttr, calcAttrsForItem } from '/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data'; - -const AUTO_COMPLETE_RESULTS_LIMIT = 15; - -Meteor.methods({ - 'inventorySearch': function(searchTerm, envId, opCounter) { - console.log('inventorySearch'); - console.log('searchTerm', R.toString(searchTerm)); - console.log('envId', R.toString(envId)); - console.log('opCounter', R.toString(opCounter)); - - this.unblock(); - - if (R.anyPass([R.isNil, R.isEmpty])(searchTerm)) { - return { - searchResults: [], - opCounter: opCounter - }; - } - - let searchExp = new RegExp(regexEscape(searchTerm), 'i'); - - let query = { - name: searchExp - }; - - if (! R.isNil(envId)) { - let env = Environments.findOne({ _id: envId }); - query = R.merge(query, { - environment: env.name - }); - } - - let searchResults = Inventory.find(query, { - limit: AUTO_COMPLETE_RESULTS_LIMIT - }).fetch(); - - searchResults = R.map((inventory) => { - console.log('search result'); - console.log(R.toString(inventory)); - - let itemEnv = Environments.findOne({ name: inventory.environment }); - - return R.merge(inventory, { - _envId: itemEnv._id - }); - }, searchResults); - - return { - opCounter: opCounter, - searchResults: searchResults, - }; - }, - - 'expandNodePath': function(nodeId) { - console.log('method server: expandNodePath', R.toString(nodeId)); - - //check(nodeId, MongoI); - this.unblock(); - - let node = Inventory.findOne({ _id: nodeId }); - if (R.isNil(node)) { - console.log('method server: expandNodePath - no node'); - return null; - } - - let idList = R.pipe(R.split('/'), R.drop(2))(node.id_path); - let result = R.map((partId) => { - return Inventory.findOne({ environment: node.environment, id: partId }); - }, idList); - - console.log('method server: expandNodePath - results', result); - return result; - }, - - 'inventoryFindNode?type&env&name': function(type, envName, nodeName) { - console.log('method server: inventoryFindNode', - R.toString(type), R.toString(envName), R.toString(nodeName)); - - check(envName, String); - check(nodeName, String); - this.unblock(); - - let query = { type: type, environment: envName, name: nodeName }; - let node = Inventory.findOne(query); - - return { - node: node - }; - }, - - 'inventoryFindNode?env&id': function (envName, nodeId) { - console.log('method server: inventoryFindNode?env&id', - R.toString(envName), R.toString(nodeId)); - - check(envName, String); - check(nodeId, String); - this.unblock(); - - let query = { environment: envName, id: nodeId }; - let node = Inventory.findOne(query); - - return { - node: node - }; - }, - - 'inventoryFindNode?DataAndAttrs': function (nodeId) { - console.log(`method server: inventoryFindNode?DataAndAttrs. ${R.toString(nodeId)}`); - //check(nodeId, ObjectId); - this.unblock(); - - let query = { _id: nodeId }; - let node = Inventory.findOne(query); - let attrsDefs = NodeHoverAttr.findOne({ 'type': node.type }); - let attributes = calcAttrsForItem(node, attrsDefs); - - return { - node: node, - nodeName: node.name, - attributes: attributes - }; - }, -}); diff --git a/ui/imports/api/inventories/server/publications.js b/ui/imports/api/inventories/server/publications.js deleted file mode 100644 index f35ff30..0000000 --- a/ui/imports/api/inventories/server/publications.js +++ /dev/null @@ -1,250 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import { Counts } from 'meteor/tmeasday:publish-counts'; -import { check } from 'meteor/check'; -import * as R from 'ramda'; - -import { Inventory } from '../inventories.js'; -import { regexEscape } from '/imports/lib/regex-utils'; - -Meteor.publish('inventory', function () { - console.log('server subscribtion to: inventory'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - //return Inventory.find({ 'show_in_tree': true }); - return Inventory.find({}); -}); - -Meteor.publish('inventory?_id', function (_id) { - console.log('server subscribtion to: inventory?_id'); - console.log('_id:', R.toString(_id)); - - return Inventory.find({ _id: _id }); -}); - -Meteor.publish('inventory?id', function (id) { - console.log('server subscribtion to: inventory?id'); - return Inventory.find({id: id}); -}); - -Meteor.publish('inventory?env&id', function (env, id) { - console.log('server subscribtion to: inventory?env&id'); - console.log(`-env: ${R.toString(env)}`); - console.log(`-id: ${R.toString(id)}`); - - return Inventory.find({environment: env, id: id}); -}); - -Meteor.publish('inventory?id_path', function (id_path) { - console.log('server subscribtion to: inventory?id_path'); - return Inventory.find({id_path: id_path}); -}); - -Meteor.publish('inventory?name&env&type', function (name, env, type) { - console.log('server subscribtion to: inventory?name&env&type'); - console.log('-name:', R.toString(name)); - console.log('-env:', R.toString(env)); - console.log('-type:', R.toString(type)); - - let query = { - name: name, - environment: env, - type: type - }; - - console.log('query', R.toString(query)); - return Inventory.find(query); -}); - -Meteor.publish('inventory?_id-in', function (idsList) { - var query = { - _id: { $in: idsList } - }; - /* - var counterName = 'inventory?env+type!counter?env=' + env + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); - */ - console.log('server subscribtion to: inventory?_id-in'); - console.log('- id-in: ' + idsList); - - return Inventory.find(query); -}); - -Meteor.publish('inventory?env+type', function (env, type) { - var query = { - environment: env, - type: type - }; - var counterName = 'inventory?env+type!counter?env=' + env + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); - - console.log('server subscribtion to: inventory-by-env-and-type'); - console.log('-env: ' + env); - console.log('-type: ' + type); - - return Inventory.find(query); -}); - -Meteor.publish('inventory?env&binding:host_id&type', function (env, host_id, type) { - var query = { - environment: env, - 'binding:host_id': host_id, - type: type - }; - console.log('server subscribtion to: inventory?env&binding:host_id&type'); - console.log('-env: ' + env); - console.log('-binding:host_id: ' + host_id); - console.log('-type: ' + type); - - return Inventory.find(query); -}); - -Meteor.publish('inventory?env+name', function (env, name) { - var query = { - name: name, - environment: env - }; - - console.log('server subscribtion to: inventory?env+name'); - console.log('- name: ' + name); - console.log('- env: ' + env); - - return Inventory.find(query); -}); - -Meteor.publish('inventory?type+host', function (type, host) { - var query = { - type: type, - host: host - }; -/* - var counterName = 'inventory?env+type!counter?env=' + env + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); -*/ - - console.log('server subscribtion to: inventory?type+host'); - console.log('- type: ' + type); - console.log('- host: ' + host); - return Inventory.find(query); -}); - -Meteor.publish('inventory?id_path_start&type', function (id_path, type) { - check(id_path, String); - check(type, String); - - let idPathExp = new RegExp(`^${regexEscape(id_path)}`); - - let query = { - id_path: idPathExp, - type: type - }; - - var counterName = 'inventory?id_path_start&type!counter?id_path_start=' + - id_path + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); - - console.log('server subscribtion to: inventory?id_path_start&type'); - console.log('-id_path_start: ' + id_path); - console.log('-type: ' + type); - return Inventory.find(query); -}); - - -Meteor.publish('inventory.children', function (id, type, name, env) { - console.log('server subscribtion to: inventory.children'); - console.log('node id: ' + R.toString(id)); - console.log('node type: ' + R.toString(type)); - console.log('node name: ' + R.toString(name)); - console.log('node env: ' + R.toString(env)); - - let query = { - $or: - [ - { - environment: env, - parent_id: id - }, - ] - }; - - if (R.equals('host_ref', type)) { - let realParent = Inventory.findOne({ - name: name, - environment: env, - type: 'host' - }); - - query = R.merge(query, { - $or: R.append({ - environment: env, - parent_id: realParent.id - }, query.$or) - }); - } - - console.log('query: ', R.toString(query)); - - return Inventory.find(query); -}); - -Meteor.publish('inventory.first-child', function (id, type, name, env) { - console.log('server subscribing to: inventory.first-child'); - console.log('node id: ' + R.toString(id)); - console.log('node type: ' + R.toString(type)); - console.log('node name: ' + R.toString(name)); - console.log('node env: ' + R.toString(env)); - - var counterName = 'inventory.first-child!counter!id=' + id; - var query = { - $or: [ - { - environment: env, - parent_id: id - } - ] - }; - - if (R.equals('host_ref', type)) { - let realParent = Inventory.findOne({ - name: name, - environment: env, - type: 'host' - }); - - query = R.merge(query, { - $or: R.append({ - environment: env, - parent_id: realParent.id - }, query.$or) - }); - } - - Counts.publish(this, counterName, Inventory.find(query, { limit: 1 })); - console.log('server subscribing to counter: ' + counterName); - -// todo: eyaltask: all criteria - console.log('query: ', R.toString(query)); - return Inventory.find(query, { limit: 1 }); -}); - -Meteor.publish('inventoryByEnv', function (env) { - console.log('server subscribtion to: inventoryByEnv'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - //return Inventory.find({ 'show_in_tree': true }); - return Inventory.find({'environment':env}); -}); - diff --git a/ui/imports/api/link-types/link-types.js b/ui/imports/api/link-types/link-types.js deleted file mode 100644 index 94d6ddd..0000000 --- a/ui/imports/api/link-types/link-types.js +++ /dev/null @@ -1,86 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Constants } from '/imports/api/constants/constants'; -//import { Environments } from '/imports/api/environments/environments'; - -export const LinkTypes = new Mongo.Collection( - 'link_types', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - description: { - type: String - }, - type: { - type: String - }, - endPointA: { - type: String, - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'object_types_for_links' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - } - }, - endPointB: { - type: String, - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'object_types_for_links' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - } - } -}; - -let simpleSchema = new SimpleSchema(schema); - -simpleSchema.addValidator(function () { - let that = this; - - let existing = LinkTypes.findOne({ - _id: { $ne: that.docId }, - endPointA: that.field('endPointA').value, - endPointB: that.field('endPointB').value - }); - - if (R.allPass([ - R.pipe(R.isNil, R.not), - R.pipe(R.propEq('_id', that.docId), R.not) - ])(existing)) { - - return 'alreadyExists'; - } - - existing = LinkTypes.findOne({ - _id: { $ne: that.docId }, - endPointA: that.field('endPointB').value, - endPointB: that.field('endPointA').value - }); - - if (R.allPass([ - R.pipe(R.isNil, R.not), - R.pipe(R.propEq('_id', that.docId), R.not) - ])(existing)) { - - return 'alreadyExists'; - } -}); - -LinkTypes.schema = simpleSchema; - -LinkTypes.attachSchema(LinkTypes.schema); diff --git a/ui/imports/api/link-types/methods.js b/ui/imports/api/link-types/methods.js deleted file mode 100644 index 846c28b..0000000 --- a/ui/imports/api/link-types/methods.js +++ /dev/null @@ -1,114 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; - -import { LinkTypes } from './link-types'; - -export const insert = new ValidatedMethod({ - name: 'links_types.insert', - validate: LinkTypes.simpleSchema() - .pick([ - //'environment', - 'description', - 'endPointA', - 'endPointB', - ]).validator({ clean: true, filter: false }), - run({ - //environment, - description, - endPointA, - endPointB - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.GLOBAL_GROUP)) { - throw new Meteor.Error('unauthorized for inserting link type'); - } - - let linkType = LinkTypes.schema.clean({ - }); - - let type = calcTypeFromEndPoints(endPointA, endPointB); - - linkType = R.merge(linkType, { - description, - endPointA, - endPointB, - type - }); - - LinkTypes.insert(linkType); - } -}); - -export const remove = new ValidatedMethod({ - name: 'links_types.remove', - validate: LinkTypes.simpleSchema() - .pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for removing link type'); - } - - let linkType = LinkTypes.findOne({ _id: _id }); - console.log('link type for remove: ', linkType); - console.log('current user', Meteor.userId()); - - LinkTypes.remove({ _id: _id }); - } -}); - -export const update = new ValidatedMethod({ - name: 'links_types.update', - validate: LinkTypes.simpleSchema() - .pick([ - '_id', - 'description', - 'endPointA', - 'endPointB', - ]).validator({ clean: true, filter: false }), - run({ - _id, - description, - endPointA, - endPointB - }) { - if (! Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.DEFAULT_GROUP)) { - throw new Meteor.Error('unauthorized for updating link type'); - } - - let linkType = LinkTypes.findOne({ _id: _id }); - console.log('link type for update: ', linkType); - console.log('current user', Meteor.userId()); - - let type = calcTypeFromEndPoints(endPointA, endPointB); - - linkType = R.merge(R.pick([ - 'description', - 'endPointA', - 'endPointB', - 'type' - ], linkType), { - description, - endPointA, - endPointB, - type - }); - - LinkTypes.update({ _id: _id }, { $set: linkType }); - } -}); - -function calcTypeFromEndPoints(endPointA, endPointB) { - return `${endPointA}-${endPointB}`; -} diff --git a/ui/imports/api/link-types/server/publications.js b/ui/imports/api/link-types/server/publications.js deleted file mode 100644 index 6c6278f..0000000 --- a/ui/imports/api/link-types/server/publications.js +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; - -import { LinkTypes } from '../link-types.js'; - -Meteor.publish('link_types', function () { - console.log('server subscribtion: link_types'); - - //let that = this; - - let query = {}; - return LinkTypes.find(query); -}); - -Meteor.publish('link_types?env*', function (env) { - console.log('server subscribtion: link_types?env*'); - console.log(env); - - //let that = this; - - let query = {}; - if (! R.isNil(env)) { query = R.assoc('environment', env, query); } - console.log('-query: ', query); - return LinkTypes.find(query); -}); - -Meteor.publish('link_types?_id', function (_id) { - console.log('server subscribtion: link_types?_id'); - console.log(_id); - - //let that = this; - - let query = { - _id: _id, - }; - console.log('-query: ', query); - return LinkTypes.find(query); -}); diff --git a/ui/imports/api/links/links.js b/ui/imports/api/links/links.js deleted file mode 100644 index 2baf58c..0000000 --- a/ui/imports/api/links/links.js +++ /dev/null @@ -1,11 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; - -export const Links = new Mongo.Collection('links', { idGeneration: 'MONGO' }); diff --git a/ui/imports/api/links/methods.js b/ui/imports/api/links/methods.js deleted file mode 100644 index 1eda375..0000000 --- a/ui/imports/api/links/methods.js +++ /dev/null @@ -1,8 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// diff --git a/ui/imports/api/links/server/methods.js b/ui/imports/api/links/server/methods.js deleted file mode 100644 index 8d3454b..0000000 --- a/ui/imports/api/links/server/methods.js +++ /dev/null @@ -1,31 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// - -import { Links } from '../links'; -import { NodeHoverAttr, calcAttrsForItem } from '/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data'; -import * as R from 'ramda'; - -Meteor.methods({ - 'linksFind?DataAndAttrs': function (id) { - console.log(`method server: linksFind?DataAndAttrs. ${R.toString(id)}`); - //check(nodeId, ObjectId); - this.unblock(); - - let query = { _id: id }; - let link = Links.findOne(query); - let attrsDefs = NodeHoverAttr.findOne({ 'type': 'link' }); - let attributes = calcAttrsForItem(link, attrsDefs); - - return { - link: link, - linkName: link.link_name, - attributes: attributes - }; - }, -}); diff --git a/ui/imports/api/links/server/publications.js b/ui/imports/api/links/server/publications.js deleted file mode 100644 index 78d0c26..0000000 --- a/ui/imports/api/links/server/publications.js +++ /dev/null @@ -1,32 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import { Links } from '../links.js'; - -Meteor.publish('links', function () { - console.log('server subscribtion to: links'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - return Links.find({}); -}); - -Meteor.publish('links?_id-in', function (idsList) { - var query = { - _id: { $in: idsList} - }; -/* - var counterName = 'inventory?env+type!counter?env=' + env + '&type=' + type; - - console.log('server subscribing to counter: ' + counterName); - Counts.publish(this, counterName, Inventory.find(query)); -*/ - - console.log('server subscribtion to: links?_id-in'); - console.log('- _id-in: ' + idsList); - return Links.find(query); -}); diff --git a/ui/imports/api/messages/messages.js b/ui/imports/api/messages/messages.js deleted file mode 100644 index 5a028b0..0000000 --- a/ui/imports/api/messages/messages.js +++ /dev/null @@ -1,125 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { Environments } from '/imports/api/environments/environments'; -import { Constants } from '/imports/api/constants/constants'; - -export const Messages = new Mongo.Collection('messages', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - - environment: { - type: String, - custom: function () { - let that = this; - let env = Environments.findOne({ name: that.value }); - - if (R.isNil(env)) { - return 'notAllowed'; - } - } - }, - - id: { - type: String - }, - - viewed: { - type: Boolean, - defaultValue: false - }, - - display_context: { - type: String - }, - - message: { - type: Object, - blackbox: true - }, - - source_system: { - type: String, - custom: function () { - let that = this; - let values = Constants.findOne({ name: 'message_source_systems' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), values))) { - return 'notAllowed'; - } - } - }, - - level: { - type: String - }, - - timestamp: { - type: Date - }, - - related_object_type: { - type: String - }, - - related_object: { - type: String - }, - - scan_id: { - type: Date - } -}; - -let simpleSchema = new SimpleSchema(schema); - -Messages.schema = simpleSchema; -Messages.attachSchema(Messages.schema); - -export function calcIconForMessageLevel(level) { - switch (level) { - case 'info': - return 'notifications'; - case 'warning': - return 'warning'; - case 'error': - return 'error'; - default: - return 'notifications'; - } -} - -export function lastMessageTimestamp (level, envName) { - let query = { level: level }; - query = R.ifElse(R.isNil, R.always(query), R.assoc('environment', R.__, query))(envName); - - let message = Messages.findOne(query, { - sort: { timestamp: -1 } - }); - - let res = R.path(['timestamp'], message); - if (R.isNil(res)) { return null; } - return (res instanceof String) ? res : res.toString(); -} - -export function calcColorClassForMessagesInfoBox(level) { - switch (level) { - case 'info': - return 'green-text'; - case 'warning': - return 'orange-text'; - case 'error': - return 'red-text'; - default: - return 'green-text'; - } -} diff --git a/ui/imports/api/messages/methods.js b/ui/imports/api/messages/methods.js deleted file mode 100644 index 1eda375..0000000 --- a/ui/imports/api/messages/methods.js +++ /dev/null @@ -1,8 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// diff --git a/ui/imports/api/messages/server/methods.js b/ui/imports/api/messages/server/methods.js deleted file mode 100644 index 540c0a1..0000000 --- a/ui/imports/api/messages/server/methods.js +++ /dev/null @@ -1,49 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; -import { Messages } from '/imports/api/messages/messages'; - -Meteor.methods({ - 'messages/get?level&env&page&amountPerPage&sortField&sortDirection': function ( - level, env, page, amountPerPage, sortField, sortDirection) { - - logMethodCall('messages/get?level&env&page&amountPerPage&sortField&sortDirection', - {level, env, page, amountPerPage}); - - this.unblock(); - - let skip = (page - 1) * amountPerPage; - - let query = {}; - let sortParams = {}; - - query = R.ifElse(R.isNil, R.always(query),R.assoc('environment', R.__, query))(env); - query = R.ifElse(R.isNil, R.always(query),R.assoc('level', R.__, query))(level); - - sortParams = R.ifElse(R.isNil, R.always(sortParams), - R.assoc(R.__, sortDirection, sortParams))(sortField); - - console.log('sort params:', sortParams); - - let qParams = { - limit: amountPerPage, - skip: skip, - sort: sortParams, - }; - - return Messages.find(query, qParams).fetch(); - } -}); - -function logMethodCall(name, args) { - console.log(`method call: ${name}`); - R.forEachObjIndexed((value, key) => { - console.log(`${key}: ${R.toString(value)}`); - }, args); -} diff --git a/ui/imports/api/messages/server/publications.js b/ui/imports/api/messages/server/publications.js deleted file mode 100644 index 8c5b59d..0000000 --- a/ui/imports/api/messages/server/publications.js +++ /dev/null @@ -1,131 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -//import { Counts } from 'meteor/tmeasday:publish-counts'; -import { Counter } from 'meteor/natestrauser:publish-performant-counts'; -import { Messages } from '../messages.js'; -import * as R from 'ramda'; - -Meteor.publish('messages', function () { - console.log('server subscribtion to: messages'); - //return Inventory.find({$where: 'this.id_path.match('^/WebEX-Mirantis@Cisco/')'}); - //return Inventory.find({ 'show_in_tree': true }); - return Messages.find({}); -}); - -Meteor.publish('messages?_id', function (_id) { - console.log('server subscribtion to: messages?_id'); - console.log('_id', _id); - - let query = { _id: _id }; - return Messages.find(query); -}); - -Meteor.publish('messages?level', function (level) { - var query = { - level: level - }; - - /* - var counterName = 'messages?level!counter?' + - 'level=' + level; - - console.log('server subscription to: ' + counterName); - Counts.publish(this, counterName, Messages.find(query)); - */ - - console.log('server subscribtion to: messages?level'); - console.log('- level: ' + level); - return Messages.find(query); -}); - -Meteor.publish('messages?env+level', function (env, level) { - var query = { - environment: env, - level: level - }; - /* - var counterName = 'messages?env+level!counter?env=' + - env + '&level=' + level; - - console.log('server subscription to: messages - counter'); - console.log(' - name: ' + counterName); - Counts.publish(this, counterName, Messages.find(query)); - */ - - console.log('server subscribtion to: messages'); - console.log('- env: ' + env); - console.log('- level: ' + level); - return Messages.find(query); -}); - -Meteor.publish('messages/count', function () { - const counterName = `messages/count`; - console.log(`subscribe - counter: ${counterName}`); - - return new Counter(counterName, Messages.find({ })); -}); - -Meteor.publish('messages/count?env', function (env) { - const counterName = `messages/count?env`; - console.log(`subscribe - counter: ${counterName}`); - - let query = {}; - query = R.ifElse(R.isNil, R.always(query), R.assoc('environment', R.__, query))(env); - return new Counter(counterName, Messages.find(query)); -}); - -Meteor.publish('messages/count?level', function (level) { - const counterName = `messages/count?level=${level}`; - console.log(`subscribe - counter: ${counterName}`); - - return new Counter(counterName, Messages.find({ level: level })); -}); - -Meteor.publish('messages/count?backDelta&level', function (backDelta, level) { - const counterName = `messages/count?backDelta=${backDelta}&level=${level}`; - console.log(`subscribe - counter: ${counterName}`); - - let begining = moment().subtract(backDelta); - let query = { - level: level, - timestamp: { $gte: begining.toDate() } - }; - - console.log(`query: ${R.toString(query)}`); - - return new Counter(counterName, Messages.find(query)); -}); - -Meteor.publish('messages/count?backDelta&level&env', function (backDelta, level, env) { - const counterName = `messages/count?backDelta=${backDelta}&level=${level}&env=${env}`; - console.log(`subscribe - counter: ${counterName}`); - - let begining = moment().subtract(backDelta); - let query = { - level: level, - environment: env, - timestamp: { $gte: begining.toDate() } - }; - - console.log(`query: ${R.toString(query)}`); - - return new Counter(counterName, Messages.find(query)); -}); - -Meteor.publish('messages/count?level&env', function (level, env) { - const counterName = `messages/count?level=${level}&env=${env}`; - console.log(`subscribe - counter: ${counterName}`); - - let query = { level: level }; - query = R.ifElse(R.isNil, R.always(query), R.assoc('environment', R.__, query))(env); - console.log(`query: ${R.toString(query)}`); - - return new Counter(counterName, Messages.find(query)); -}); diff --git a/ui/imports/api/migrations/migrations.js b/ui/imports/api/migrations/migrations.js deleted file mode 100644 index 79411b1..0000000 --- a/ui/imports/api/migrations/migrations.js +++ /dev/null @@ -1,20 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { CliqueTypes } from '/imports/api/clique-types/clique-types'; - -Migrations.add({ - version: 1, - up: () => { - console.log('migrating: add clique type constaints for env+name, env+focal_point_type'); - CliqueTypes._ensureIndex({ environment: 1, name: 1 }); - CliqueTypes._ensureIndex({ environment: 1, focal_point_type: 1 }); - }, - down: () => { - } -}); diff --git a/ui/imports/api/scans/methods.js b/ui/imports/api/scans/methods.js deleted file mode 100644 index 82af820..0000000 --- a/ui/imports/api/scans/methods.js +++ /dev/null @@ -1,55 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import * as R from 'ramda'; - -import { Scans } from './scans'; - -export const insert = new ValidatedMethod({ - name: 'scans.insert', - validate: Scans.simpleSchema() - .pick([ - 'environment', - 'object_id', - 'log_level', - 'clear', - 'loglevel', - 'scan_only_inventory', - 'scan_only_links', - 'scan_only_cliques', - ]).validator({ clean: true, filter: false }), - run({ - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - }) { - let scan = Scans.schema.clean({ - status: 'pending' - }); - scan = R.merge(scan, { - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - submit_timestamp: Date.now() - }); - - Scans.insert(scan); - }, - -}); diff --git a/ui/imports/api/scans/scans.js b/ui/imports/api/scans/scans.js deleted file mode 100644 index 857c2ea..0000000 --- a/ui/imports/api/scans/scans.js +++ /dev/null @@ -1,159 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - -import { Constants } from '/imports/api/constants/constants'; -import { StatusesInOperation } from '/imports/api/constants/data/scans-statuses'; - -export const Scans = new Mongo.Collection('scans', { idGeneration: 'MONGO' }); - -Scans.schemaRelated = { - environment: { - label: 'Environment', - description: 'Name of environment to scan', - disabled: true, - }, - status: { - label: 'Status', - description: 'Scan lifecycle status', - subtype: 'select', - options: 'scans_statuses', - disabled: true, - }, - object_id: { - label: 'Scan specific object', - description: 'Object ID', - }, - log_level: { - label: 'Log level', - description: 'logging level', - subtype: 'select', - options: 'log_levels', - }, - clear: { - label: 'Clear data', - description: 'clear all data prior to scanning', - }, - scan_only_inventory: { - label: 'Scan only inventory', - description: 'do only scan to inventory', - }, - scan_only_links: { - label: 'Scan only links', - description: 'do only links creation', - }, - scan_only_cliques: { - label: 'Scan only cliques', - description: 'do only cliques creation', - }, -}; - -Scans.scansOnlyFields = ['scan_only_inventory', 'scan_only_links', 'scan_only_cliques']; - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - environment: { - type: String - }, - status: { - type: String, - defaultValue: 'draft', - custom: function () { - let that = this; - let statuses = Constants.findOne({ name: 'scans_statuses' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), statuses))) { - return 'notAllowed'; - } - }, - }, - object_id: { - type: String, - optional: true, - }, - log_level: { - type: String, - defaultValue: 'warning', - custom: function () { - let that = this; - let logLevels = Constants.findOne({ name: 'log_levels' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), logLevels))) { - return 'notAllowed'; - } - }, - }, - clear: { - type: Boolean, - defaultValue: true, - }, - scan_only_inventory: { - type: Boolean, - defaultValue: false, - }, - scan_only_links: { - type: Boolean, - defaultValue: false, - }, - scan_only_cliques: { - type: Boolean, - defaultValue: false, - }, - submit_timestamp: { - type: Date, - defaultValue: null - }, - -}; - -Scans.schema = new SimpleSchema(schema); -Scans.schema.addValidator(function () { - let that = this; - let env = that.field('environment').value; - - let currentScansCount = Scans.find({ - environment: env, - status: { $in: StatusesInOperation } - }).count(); - - if (currentScansCount > 0) { - throw { - isError: true, - type: 'notUinque', - data: [], - message: 'There is already a scan in progress.' - }; - } - - let scanOnlyFields = R.filter( f => that.field(f).value, Scans.scansOnlyFields); - - if(scanOnlyFields.length > 1) { - throw { - isError: true, - type: 'conflict', - data: scanOnlyFields, - message: 'Only one of the scan only fields can be selected' - }; - } - -}); - -Scans.attachSchema(Scans.schema); - -Scans.schemaRelated = R.mapObjIndexed((relatedItem, key) => { - return R.merge(relatedItem, { - type: schema[key].type - }); - -}, Scans.schemaRelated); - -export const subsScansEnvPageAmountSorted = 'scans?env*&page&amount&sortField&sortDirection'; -export const subsScansEnvPageAmountSortedCounter = `${subsScansEnvPageAmountSorted}!counter`; diff --git a/ui/imports/api/scans/server/methods.js b/ui/imports/api/scans/server/methods.js deleted file mode 100644 index 0fe43c2..0000000 --- a/ui/imports/api/scans/server/methods.js +++ /dev/null @@ -1,44 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { check } from 'meteor/check'; -import * as R from 'ramda'; -import { Scans } from '../scans'; -import { Environments } from '/imports/api/environments/environments'; - -Meteor.methods({ - 'scansFind?start-timestamp-before': function (startTimestamp) { - console.log('method server: scanFind?start-timestamp-before', - R.toString(startTimestamp)); - - check(startTimestamp, Date); - this.unblock(); - - let query = { start_timestamp: { $lt: startTimestamp }}; - let scan = Scans.findOne(query, { - sort: { start_timestamp: -1 } - }); - - let environment = R.ifElse( - R.isNil, - R.always(null), - (scan) => { - console.log('finding environment:', scan.environment); - let env = Environments.findOne({ name: scan.environment }); - console.log('found env:', env); - return env; - })(scan); - - console.log('found scan', scan); - - return { - environment: environment, - scan: scan, - }; - }, -}); diff --git a/ui/imports/api/scans/server/publications.js b/ui/imports/api/scans/server/publications.js deleted file mode 100644 index 774fe3d..0000000 --- a/ui/imports/api/scans/server/publications.js +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Counts } from 'meteor/tmeasday:publish-counts'; - -import { Scans, - subsScansEnvPageAmountSorted, - subsScansEnvPageAmountSortedCounter, -} from '../scans.js'; - -Meteor.publish('scans?env', function (env_name) { - console.log('server subscribtion: scans?env'); - console.log(env_name); - - return Scans.find({ - environment: env_name, - }); -}); - -Meteor.publish('scans?env*', function (env) { - console.log('server subscribtion: scans?env*'); - console.log(env); - - //let that = this; - - let query = {}; - if (! R.isNil(env)) { query = R.assoc('environment', env, query); } - console.log('-query: ', query); - return Scans.find(query); -}); - -Meteor.publish(subsScansEnvPageAmountSorted, function ( - env, page, amountPerPage, sortField, sortDirection) { - - console.log(`server subscribtion: ${subsScansEnvPageAmountSorted}`); - console.log(env); - console.log('page: ', page); - console.log('amount: ', amountPerPage); - console.log('sortField: ', sortField, R.isNil(sortField)); - console.log('sortDirection: ', sortDirection); - - let skip = (page - 1) * amountPerPage; - - let query = {}; - if (! R.isNil(env)) { query = R.assoc('environment', env, query); } - console.log('-query: ', query); - let sortParams = {}; - - sortParams = R.ifElse(R.isNil, R.always(sortParams), - R.assoc(R.__, sortDirection, sortParams))(sortField); - - console.log('sort params:', sortParams); - - let qParams = { - limit: amountPerPage, - skip: skip, - sort: sortParams, - }; - - Counts.publish(this, subsScansEnvPageAmountSortedCounter, Scans.find(query), { - noReady: true - }); - - return Scans.find(query, qParams); -}); - -Meteor.publish('scans?id', function (id) { - console.log('server subscribtion: scans?id'); - console.log('-id: ', id); - - //let that = this; - - let query = { _id: id }; - return Scans.find(query); -}); diff --git a/ui/imports/api/scheduled-scans/methods.js b/ui/imports/api/scheduled-scans/methods.js deleted file mode 100644 index 06cdea7..0000000 --- a/ui/imports/api/scheduled-scans/methods.js +++ /dev/null @@ -1,123 +0,0 @@ -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import * as R from 'ramda'; - -import { ScheduledScans } from './scheduled-scans'; - -export const insert = new ValidatedMethod({ - name: 'scheduled-scans.insert', - validate: ScheduledScans.simpleSchema() - .pick([ - 'environment', - 'object_id', - 'log_level', - 'clear', - 'loglevel', - 'scan_only_inventory', - 'scan_only_links', - 'scan_only_cliques', - 'freq', - ]).validator({ clean: true, filter: false }), - run({ - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - freq, - }) { - let scan = ScheduledScans.schema.clean({ }); - - scan = R.merge(scan, { - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - freq, - submit_timestamp: Date.now() - }); - - ScheduledScans.insert(scan); - }, - -}); - -export const update = new ValidatedMethod({ - name: 'scheduled_scans.update', - validate: ScheduledScans.simpleSchema() - .pick([ - '_id', - 'environment', - 'object_id', - 'log_level', - 'clear', - 'loglevel', - 'scan_only_inventory', - 'scan_only_links', - 'scan_only_cliques', - 'freq', - ]).validator({ clean: true, filter: false }), - run({ - _id, - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - freq, - }) { - let item = ScheduledScans.findOne({ _id: _id }); - console.log('scheduled scan for update: ', item); - - item = R.merge(R.pick([ - 'environment', - 'object_id', - 'log_level', - 'clear', - 'loglevel', - 'scan_only_inventory', - 'scan_only_links', - 'scan_only_cliques', - 'submit_timestamp', - 'freq', - ], item), { - environment, - object_id, - log_level, - clear, - loglevel, - scan_only_inventory, - scan_only_links, - scan_only_cliques, - freq, - submit_timestamp: Date.now() - }); - - ScheduledScans.update({ _id: _id }, { $set: item }); - } -}); - -export const remove = new ValidatedMethod({ - name: 'scheduled_scans.remove', - validate: ScheduledScans.simpleSchema() - .pick([ - '_id', - ]).validator({ clean: true, filter: false }), - run({ - _id - }) { - let item = ScheduledScans.findOne({ _id: _id }); - console.log('scheduled scan for remove: ', item); - - ScheduledScans.remove({ _id: _id }); - } -}); diff --git a/ui/imports/api/scheduled-scans/scheduled-scans.js b/ui/imports/api/scheduled-scans/scheduled-scans.js deleted file mode 100644 index 4d06a33..0000000 --- a/ui/imports/api/scheduled-scans/scheduled-scans.js +++ /dev/null @@ -1,84 +0,0 @@ -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Constants } from '/imports/api/constants/constants'; -import * as R from 'ramda'; - -export const ScheduledScans = new Mongo.Collection('scheduled_scans', { idGeneration: 'MONGO' }); - -export const scansOnlyFields = ['scan_only_inventory', 'scan_only_links', 'scan_only_cliques']; - -let schema = new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - environment: { - type: String - }, - object_id: { - type: String, - optional: true, - }, - log_level: { - type: String, - defaultValue: 'warning', - custom: function () { - let that = this; - let logLevels = Constants.findOne({ name: 'log_levels' }).data; - - if (R.isNil(R.find(R.propEq('value', that.value), logLevels))) { - return 'notAllowed'; - } - }, - }, - clear: { - type: Boolean, - defaultValue: true, - }, - scan_only_inventory: { - type: Boolean, - defaultValue: true, - }, - scan_only_links: { - type: Boolean, - defaultValue: false, - }, - scan_only_cliques: { - type: Boolean, - defaultValue: false, - }, - freq: { - type: String, - defaultValue: 'WEEKLY', - }, - submit_timestamp: { - type: Date, - defaultValue: null - }, - scheduled_timestamp: { - type: Date, - optional: true, - } -}); - -schema.addValidator(function () { - let that = this; - let currentScansOnlyFields = - R.reject( f => that.field(f).value == false, scansOnlyFields); - - if(currentScansOnlyFields.length > 1) { - throw { - isError: true, - type: 'conflict', - data: currentScansOnlyFields, - message: `Only one of the scan only fields can be selected. ${R.toString(currentScansOnlyFields)}` - }; - } -}); - -ScheduledScans.schema = schema; -ScheduledScans.attachSchema(ScheduledScans.schema); - -export const subsScheduledScansPageAmountSorted = 'scheduled_scans?page&amount&sortField&sortDirection'; -export const subsScheduledScansPageAmountSortedCounter = `${subsScheduledScansPageAmountSorted}!counter`; - -export const subsScheduledScansId = 'scheduled_scans?_id'; - -export const subsScheduledScansEnv = 'scheduled_scans?env'; diff --git a/ui/imports/api/scheduled-scans/server/methods.js b/ui/imports/api/scheduled-scans/server/methods.js deleted file mode 100644 index 4a6c508..0000000 --- a/ui/imports/api/scheduled-scans/server/methods.js +++ /dev/null @@ -1,19 +0,0 @@ -import { check } from 'meteor/check'; -import * as R from 'ramda'; -import { ScheduledScans } from '../scheduled-scans'; - -Meteor.methods({ - 'scheduledScansFind?env': function (env) { - console.log('method server: scheduledScansFind?env', R.toString(env)); - - check(env, String); - this.unblock(); - - let query = { environment: env }; - let scheduledScan = ScheduledScans.findOne(query, {}); - - return { - item: scheduledScan - }; - } -}); diff --git a/ui/imports/api/scheduled-scans/server/publications.js b/ui/imports/api/scheduled-scans/server/publications.js deleted file mode 100644 index f4c5b9b..0000000 --- a/ui/imports/api/scheduled-scans/server/publications.js +++ /dev/null @@ -1,64 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Counts } from 'meteor/tmeasday:publish-counts'; - -import { - ScheduledScans, - subsScheduledScansPageAmountSorted, - subsScheduledScansPageAmountSortedCounter, - subsScheduledScansId, - subsScheduledScansEnv, -} from '../scheduled-scans.js'; - -Meteor.publish(subsScheduledScansPageAmountSorted, function ( - page, amountPerPage, sortField, sortDirection) { - - console.log(`server subscribtion: ${subsScheduledScansPageAmountSorted}`); - console.log('page: ', page); - console.log('amount: ', amountPerPage); - console.log('sortField: ', sortField, R.isNil(sortField)); - console.log('sortDirection: ', sortDirection); - - let skip = (page - 1) * amountPerPage; - - let query = {}; - console.log('-query: ', query); - let sortParams = {}; - - sortParams = R.ifElse(R.isNil, R.always(sortParams), - R.assoc(R.__, sortDirection, sortParams))(sortField); - - console.log('sort params:', sortParams); - - let qParams = { - limit: amountPerPage, - skip: skip, - sort: sortParams, - }; - - Counts.publish(this, subsScheduledScansPageAmountSortedCounter, ScheduledScans.find(query), { - noReady: true - }); - - return ScheduledScans.find(query, qParams); -}); - -Meteor.publish(subsScheduledScansId, function (_id) { - console.log(`server subscribtion: ${subsScheduledScansId}`); - console.log('-id: ', _id); - - //let that = this; - - let query = { _id: _id }; - return ScheduledScans.find(query); -}); - -Meteor.publish(subsScheduledScansEnv, function (env) { - console.log(`server subscribtion: ${subsScheduledScansEnv}`); - console.log('-env: ', env); - - //let that = this; - - let query = { environment: env }; - return ScheduledScans.find(query); -}); diff --git a/ui/imports/api/simple-schema.init.js b/ui/imports/api/simple-schema.init.js deleted file mode 100644 index 4f5addb..0000000 --- a/ui/imports/api/simple-schema.init.js +++ /dev/null @@ -1,13 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -SimpleSchema.messages({ - 'alreadyExists': 'item already exists' -}); diff --git a/ui/imports/api/statistics/helpers.js b/ui/imports/api/statistics/helpers.js deleted file mode 100644 index 7cb78e8..0000000 --- a/ui/imports/api/statistics/helpers.js +++ /dev/null @@ -1,64 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; - -export function createGraphQuerySchema( - env, - object_id, - type, - flowType, - timeStart, - timeEnd, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address) { - - let schema = { - environment: env, - object_id: object_id, - type: type, - flowType: flowType, - /* - averageArrivalNanoSeconds: { - $gte: timeStart, - //$lt: timeEnd - } - */ - data_arrival_avg: { - $gte: timeStart, - } - }; - - if (! R.isNil(timeEnd)) { - //schema = R.assocPath(['averageArrivalNanoSeconds', '$lt'], timeEnd, schema); - schema = R.assocPath(['data_arrival_avg', '$lt'], timeEnd, schema); - } - - switch (flowType) { - case 'L2': - schema = R.merge(schema, { - sourceMacAddress: sourceMacAddress, - destinationMacAddress: destinationMacAddress - }); - break; - - case 'L3': - schema = R.merge(schema, { - sourceIPv4Address: sourceIPv4Address, - destinationIPv4Address: destinationIPv4Address - }); - break; - - default: - break; - } - - return schema; -} diff --git a/ui/imports/api/statistics/methods.js b/ui/imports/api/statistics/methods.js deleted file mode 100644 index 23a216d..0000000 --- a/ui/imports/api/statistics/methods.js +++ /dev/null @@ -1,159 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; -import { Statistics } from './statistics'; -import { createGraphQuerySchema } from './helpers'; - -Meteor.methods({ - 'statistics.flowTypes?env&object_id&type'({ env, object_id, type}) { - console.log('subscribe: statistics.flowTypes?env&object_id&type'); - console.log(`- env: ${env}`); - console.log(`- object_id: ${object_id}`); - console.log(`- type: ${type}`); - - let pipeline = [{ - $match: { - environment: env, - object_id: object_id, - type: type - } - }, { - $group: { - _id: { flowType: '$flowType' }, - flowType: { $first: '$flowType' } - } - }]; - - return Statistics.aggregate(pipeline); - }, - - 'statistics.srcMacAddresses?env&object_id&type&flowType'( - { env, object_id, type, flowType }) { - - let pipeline = [{ - $match: { - environment: env, - object_id: object_id, - type: type, - flowType: flowType - } - }, { - $group: { - _id: { sourceMacAddress: '$sourceMacAddress' }, - sourceMacAddress: { $first: '$sourceMacAddress' } - } - }]; - - return Statistics.aggregate(pipeline); - }, - - 'statistics.dstMacAddresses?env&object_id&type&flowType'( - { env, object_id, type, flowType }) { - - let pipeline = [{ - $match: { - environment: env, - object_id: object_id, - type: type, - flowType: flowType - } - }, { - $group: { - _id: { destinationMacAddress: '$destinationMacAddress' }, - destinationMacAddress: { $first: '$destinationMacAddress' } - } - }]; - - return Statistics.aggregate(pipeline); - }, - - 'statistics.srcIPv4Addresses?env&object_id&type&flow_typw'( - { env, object_id, type, flowType }) { - let pipeline = [{ - $match: { - environment: env, - object_id: object_id, - type: type, - flowType: flowType - } - }, { - $group: { - _id: { sourceIPv4Address: '$sourceIPv4Address' }, - sourceIPv4Address: { $first: '$sourceIPv4Address' } - } - }]; - - return Statistics.aggregate(pipeline); - }, - - 'statistics.dstIPv4Addresses?env&object_id&type&flowType'( - { env, object_id, type, flowType }) { - let pipeline = [{ - $match: { - environment: env, - object_id: object_id, - type: type, - flowType: flowType - } - }, { - $group: { - _id: { destinationIPv4Address: '$destinationIPv4Addres' }, - destinationIPv4Address: { $first: '$destinationIPv4Addres' } - } - }]; - - return Statistics.aggregate(pipeline); - }, - - 'statistics!graph-frames'({ - env, - object_id, - type, - flowType, - timeStart, - timeEnd, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address - }) { - let schema = createGraphQuerySchema( - env, - object_id, - type, - flowType, - timeStart, - timeEnd, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address); - - console.log('statistics!graph-frames'); - console.log(`- env: ${env}`); - console.log(`- object_id: ${object_id}`); - console.log(`- type: ${type}`); - console.log(`- flowType: ${flowType}`); - console.log(`- timeStart: ${timeStart}`); - console.log(`- timeEnd: ${timeEnd}`); - console.log(`- sourceMacAddress: ${sourceMacAddress}`); - console.log(`- destinationMacAddress: ${destinationMacAddress}`); - console.log(`- sourceIPv4Address: ${sourceIPv4Address}`); - console.log(`- destinationIPv4Address: ${destinationIPv4Address}`); - - //let data = Statistics.find(schema).fetch(); - let data = Statistics.findOne(schema); - console.log(`- averageArrivalNanoSeconds: ${R.path([0, 'averageArrivalNanoSeconds'], data)}`); - - return data; - } -}); - - - diff --git a/ui/imports/api/statistics/server/publications.js b/ui/imports/api/statistics/server/publications.js deleted file mode 100644 index f69be56..0000000 --- a/ui/imports/api/statistics/server/publications.js +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -//import { Counts } from 'meteor/tmeasday:publish-counts'; -import { Statistics } from '../statistics.js'; -import { createGraphQuerySchema } from '../helpers'; - -Meteor.publish('statistics!graph-frames', function ({ - env, - object_id, - type, - flowType, - timeStart, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address -}) { - console.log('server subscribe: statistics?graph-frames'); - - let schema = createGraphQuerySchema( - env, - object_id, - type, - flowType, - timeStart, - null, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address); - - console.log('statistics!graph-frames'); - console.log(`- env: ${env}`); - console.log(`- object_id: ${object_id}`); - console.log(`- type: ${type}`); - console.log(`- flowType: ${flowType}`); - console.log(`- timeStart: ${timeStart}`); - console.log(`- sourceMacAddress: ${sourceMacAddress}`); - console.log(`- destinationMacAddress: ${destinationMacAddress}`); - console.log(`- sourceIPv4Address: ${sourceIPv4Address}`); - console.log(`- destinationIPv4Address: ${destinationIPv4Address}`); - - return Statistics.find(schema); -}); - diff --git a/ui/imports/api/statistics/statistics.js b/ui/imports/api/statistics/statistics.js deleted file mode 100644 index 3391933..0000000 --- a/ui/imports/api/statistics/statistics.js +++ /dev/null @@ -1,14 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import * as R from 'ramda'; - -export const Statistics = new Mongo.Collection( - 'statistics', { idGeneration: 'MONGO' }); diff --git a/ui/imports/api/supported_environments/methods.js b/ui/imports/api/supported_environments/methods.js deleted file mode 100644 index 1eda375..0000000 --- a/ui/imports/api/supported_environments/methods.js +++ /dev/null @@ -1,8 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// diff --git a/ui/imports/api/supported_environments/server/publications.js b/ui/imports/api/supported_environments/server/publications.js deleted file mode 100644 index 8fef880..0000000 --- a/ui/imports/api/supported_environments/server/publications.js +++ /dev/null @@ -1,17 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; -import { SupportedEnvironments, - subsNameSupportedEnvs -} from '../supported_environments.js'; - -Meteor.publish(subsNameSupportedEnvs, function () { - console.log(`server subscribtion to: ${subsNameSupportedEnvs}`); - return SupportedEnvironments.find({}); -}); diff --git a/ui/imports/api/supported_environments/supported_environments.js b/ui/imports/api/supported_environments/supported_environments.js deleted file mode 100644 index 6637b74..0000000 --- a/ui/imports/api/supported_environments/supported_environments.js +++ /dev/null @@ -1,63 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import * as R from 'ramda'; - -export const SupportedEnvironments = new Mongo.Collection( - 'supported_environments', { idGeneration: 'MONGO' }); - -export const subsNameSupportedEnvs = 'supported-environments'; - -export function isMonitoringSupported( - distribution, - distribution_version, - type_drivers, - mechanism_drivers -) { - console.log('isMonitoringSupported'); - console.log(`distribution: ${R.toString(distribution)}`); - console.log(`distribution_version: ${R.toString(distribution_version)}`); - console.log(`type_drivers: ${R.toString(type_drivers)}`); - console.log(`mechanism_drivers: ${R.toString(mechanism_drivers)}`); - - let result = SupportedEnvironments.find({ - 'environment.distribution': distribution, - 'environment.distribution_version': { $in: [ distribution_version ] }, - 'environment.type_drivers': type_drivers, - 'environment.mechanism_drivers': { $in: mechanism_drivers }, - 'features.monitoring': true - }).count() > 0; - - console.log(`result: ${R.toString(result)}`); - return result; -} - -export function isListeningSupported( - distribution, - distribution_version, - type_drivers, - mechanism_drivers -) { - console.log('isListeningSupported'); - console.log(`distribution: ${R.toString(distribution)}`); - console.log(`distribution: ${R.toString(distribution)}`); - console.log(`type_drivers: ${R.toString(type_drivers)}`); - console.log(`mechanism_drivers: ${R.toString(mechanism_drivers)}`); - - let result = SupportedEnvironments.find({ - 'environment.distribution': distribution, - 'environment.distribution_version': { $in: [ distribution_version ] }, - 'environment.type_drivers': type_drivers, - 'environment.mechanism_drivers': { $in: mechanism_drivers }, - 'features.listening': true - }).count() > 0; - - console.log(`result: ${R.toString(result)}`); - return result; -} diff --git a/ui/imports/api/user-settings/methods.js b/ui/imports/api/user-settings/methods.js deleted file mode 100644 index e948c1e..0000000 --- a/ui/imports/api/user-settings/methods.js +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { ValidatedMethod } from 'meteor/mdg:validated-method'; -import { UserSettings } from '/imports/api/user-settings/user-settings'; -import * as R from 'ramda'; - -export const save = new ValidatedMethod({ - name: 'user-settings.save', - validate: UserSettings.simpleSchema() - .pick([ - 'messages_view_backward_delta' - ]).validator({ clean: true, filter: false }), - run({ - messages_view_backward_delta - }) { - - let userId = this.userId; - let userSettings = UserSettings.findOne({ user_id: userId }); - - if (userSettings) { - UserSettings.update({ _id: userSettings._id}, { $set: { - messages_view_backward_delta: messages_view_backward_delta - }}); - } else { - let item = UserSettings.schema.clean({}); - item = R.merge(item, { - user_id: userId, - messages_view_backward_delta: messages_view_backward_delta - }); - UserSettings.insert(item); - } - } -}); diff --git a/ui/imports/api/user-settings/server/publications.js b/ui/imports/api/user-settings/server/publications.js deleted file mode 100644 index c53146c..0000000 --- a/ui/imports/api/user-settings/server/publications.js +++ /dev/null @@ -1,21 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Meteor } from 'meteor/meteor'; - -import { UserSettings } from '../user-settings.js'; - -Meteor.publish('user_settings?user', function () { - console.log('server subscribtion: user_settings?user'); - - let userId = this.userId; - - let query = { user_id: userId }; - console.log('-query: ', query); - return UserSettings.find(query); -}); diff --git a/ui/imports/api/user-settings/user-settings.js b/ui/imports/api/user-settings/user-settings.js deleted file mode 100644 index 2e553aa..0000000 --- a/ui/imports/api/user-settings/user-settings.js +++ /dev/null @@ -1,29 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Mongo } from 'meteor/mongo'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import * as R from 'ramda'; - -export const UserSettings = new Mongo.Collection('user_settings', { idGeneration: 'MONGO' }); - -let schema = { - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - user_id: { - type: String, - }, - messages_view_backward_delta: { - type: Number, - minCount: 1, - defaultValue: '1209600000', // 14 days - } -}; - -let simpleSchema = new SimpleSchema(schema); -UserSettings.schema = simpleSchema; -UserSettings.attachSchema(UserSettings.schema); diff --git a/ui/imports/index.styl b/ui/imports/index.styl deleted file mode 100644 index d810c63..0000000 --- a/ui/imports/index.styl +++ /dev/null @@ -1 +0,0 @@ -@import 'ui/*' diff --git a/ui/imports/lib/d3-graph.js b/ui/imports/lib/d3-graph.js deleted file mode 100644 index 311ad95..0000000 --- a/ui/imports/lib/d3-graph.js +++ /dev/null @@ -1,573 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Inventory } from '/imports/api/inventories/inventories'; -import { Cliques } from '/imports/api/cliques/cliques'; -import { Links } from '/imports/api/links/links'; -import { NodeHoverAttr } from '/imports/api/attributes_for_hover_on_data/attributes_for_hover_on_data'; -import * as cola from 'webcola'; -import { store } from '/imports/ui/store/store'; -import { activateGraphTooltipWindow } from '/imports/ui/actions/graph-tooltip-window.actions'; -import { closeGraphTooltipWindow } from '/imports/ui/actions/graph-tooltip-window.actions'; -import { activateVedgeInfoWindow } from '/imports/ui/actions/vedge-info-window.actions'; -import * as R from 'ramda'; - -let d3Graph = { - color:'', - - zoomer:function(){ - var width = '100%', - height = '100%'; - var xScale = d3.scale.linear() - .domain([0,width]).range([0,width]); - var yScale = d3.scale.linear() - .domain([0,height]).range([0, height]); - return d3.behavior.zoom(). - scaleExtent([0.1,10]). - x(xScale). - y(yScale). - on('zoomstart', d3Graph.zoomstart). - on('zoom', d3Graph.redraw); - }, - - svg:'', - force:'', - link:'', - node:'', - linkText:'', - - graph:{ - nodes:[], - links:[], - }, - - zoomstart:function () { - var node = d3Graph.svg.selectAll('.node'); - node.each(function(d) { - d.selected = false; - d.previouslySelected = false; - }); - node.classed('selected', false); - }, - - /* depreacted - not used ? - getGraphData:function(nodeId){ - - var invNodes = Inventory.find({ 'type': 'instance', $and: [ { 'host': nodeId } ] }); - - var edges = []; - var nodes = []; - - invNodes.forEach(function(n){ - nodes = n['Entities']; - edges = n['Relations']; - }); - - nodes.forEach(function(n){ - n.name = n.object_name; - }); - - var edges_new = []; - edges.forEach(function(e) { - var sourceNode = nodes.filter(function(n) { return n.id === e.from; })[0], - targetNode = nodes.filter(function(n) { return n.id === e.to; })[0]; - - edges_new.push({source: sourceNode, target: targetNode, value: 1,label: e.label,attributes: e.attributes}); - }); -//any links with duplicate source and target get an incremented 'linknum' - for (var i=0; i links collection) - var linksList = Links.find({ _id: {$in: cliquesLinks}}).fetch(); - //console.log(linksList); - - // Create nodes from the links endpoints. - // Nodes = link source & target (objectid) - linksList.forEach(function(linkItem){ - nodes.push(linkItem['source']); - nodes.push(linkItem['target']); - }); - - // NodesList = Nodes exapneded. - var nodesList = Inventory.find({ _id: {$in: nodes}}).fetch(); - - // Links list: expanend source/target nodes to create in memory data graph - links,nodes. - linksList.forEach(function(linkItem){ - var sourceNode = nodesList.filter(function(n) { - return n._id._str === linkItem.source._str; - })[0]; - - var targetNode = nodesList.filter(function(n) { - return n._id._str === linkItem.target._str; - })[0]; - - edges_new.push({ - source: sourceNode, - target: targetNode, - value: 1, - label: linkItem.link_name, - attributes: linkItem - }); - - }); - - // Expend nodeslist to include linked attributes. - nodesList.forEach(function(nodeItem){ - nodeItem.attributes = []; - var attrHoverFields = NodeHoverAttr.find({ 'type': nodeItem['type']}).fetch(); - if(attrHoverFields.length){ - attrHoverFields[0].attributes.forEach(function(field){ - if(nodeItem[field]){ - var object = {}; - object[field] = nodeItem[field]; - nodeItem.attributes.push(object); - } - }); - } - }); - - this.graph.nodes = nodesList; - this.graph.links = edges_new; - - }, - - createGraphData: function (width, height){ - //var self = this; - //var width = 500; - //var height = 900; - - this.color = d3.scale.category20(); - /* - this.svg = d3.select('#dgraphid').append('svg') - .attr('width', '100%') - .attr('height', '100%') - .attr('pointer-events', 'all') - //.attr('transform', 'translate(250,250) scale(0.3)') - .call(d3.behavior.zoom().on('zoom', this.redraw)) - .append('svg:g'); - - //.append('g'); - - this.force = cola.d3adaptor().convergenceThreshold(0.1) - //.linkDistance(200) - .size([width, height]); - */ - //var focused = null; - - this.force = cola.d3adaptor().convergenceThreshold(0.1) - //.linkDistance(200) - .size([width, height]); - - var outer = d3.select('#dgraphid') - .append('svg') - .attr({ - width: '100%', - height: '100%', - 'pointer-events': 'all', - class: 'os-d3-graph' - }); - - outer.append('rect') - .attr({ class: 'background', width: '100%', height: '100%' }) - .call(this.zoomer()); - /*.call(d3.behavior.zoom() - .on('zoom', function(d) { - d3Graph.svg.attr('transform', 'translate(' + d3.event.translate + ')' + ' scale(' + d3.event.scale + ')'); - }))*/ - //.on('mouseover', function () { focused = this; }); - - //d3.select('body').on('keydown', function () { d3.select(focused); /* then do something with it here */ }); - //d3.select('#dgraphid').on('keydown', d3Graph.keydown()); - - let scale = 0.5; - - this.svg = outer - .append('g') - //.attr('transform', 'translate(250,250) scale(0.3)'); - .attr('transform', 'translate(250,250) scale(' + scale.toString() + ')'); - - let fontSize = Math.floor(16 / scale); - d3Graph.svg.selectAll('.link-group text') - .style('font-size', fontSize + 'px'); - d3Graph.svg.selectAll('.node text') - .style('font-size', fontSize + 'px'); - - }, - - redraw: function(){ - //console.log('here', d3.event.translate, d3.event.scale); - - d3Graph.svg.attr('transform', - 'translate(' + d3.event.translate + ')' - + ' scale(' + d3.event.scale + ')'); - - let fontSize = Math.floor(16 / d3.event.scale); - d3Graph.svg.selectAll('.link-group text') - .style('font-size', fontSize + 'px'); - d3Graph.svg.selectAll('.node text') - .style('font-size', fontSize + 'px'); - - }, - - updateNetworkGraph:function (){ - var self = this; - - if (R.isNil(this.svg)) { - return; - } - - this.svg.selectAll('g').remove(); - //this.svg.exit().remove(); - - this.force - .nodes(this.graph.nodes) - .links(this.graph.links) - .symmetricDiffLinkLengths(250) - //.jaccardLinkLengths(300) - //.jaccardLinkLengths(80,0.7) - .handleDisconnected(true) - .avoidOverlaps(true) - .start(50, 100, 200); - - /* - this.force - .on('dragstart', function (d) { d3.event.sourceEvent.stopPropagation(); d3.select(this).classed('dragging', true); } ) - .on('drag', function (d) { d3.select(this).attr('cx', d.x = d3.event.x).attr('cy', d.y = d3.event.y); } ) - .on('dragend', function (d) { d3.select(this).classed('dragging', false); }); - */ - - - // Define the div for the tooltip - - //svg.exit().remove(); - //graph.constraints = [{'axis':'y', 'left':0, 'right':1, 'gap':25},]; - - //.start(10,15,20); - /*var path = svg.append('svg:g') - .selectAll('path') - .data(force.links()) - .enter().append('svg:path') - .attr('class', 'link');; - */ - var link = this.svg.selectAll('.link') - .data(this.force.links()) - .enter() - .append('g') - .attr('class', 'link-group') - .append('line') - .attr('class', 'link') - .style('stroke-width', function(_d) { return 3; }) - //.style('stroke-width', function(d) { return Math.sqrt(d.stroke); }) - .attr('stroke', function (d) { - if(d.attributes.state == 'error'){ - self.blinkLink(d); - return 'red'; - } - else if(d.attributes.state == 'warn'){ - self.blinkLink(d); - return 'orange'; - } - else if(d.source.level === d.target.level) { - return self.color(d.source.level); - } - else { - return self.color(d.level); - //d3.select(this).classed('different-groups', true); - } - }); - /*.style('stroke', function(d) { - if(d.label == 'net-103'){ - self.blinkLink(d); - return 'red'; - } - //return 'red'; - //return self.color(d.level); - })*/ - - var linkText = this.svg.selectAll('.link-group') - .append('text') - .data(this.force.links()) - .text(function(d) { return d.label; }) - .attr('x', function(d) { return (d.source.x + (d.target.x - d.source.x) * 0.5); }) - .attr('y', function(d) { return (d.source.y + (d.target.y - d.source.y) * 0.5); }) - .attr('dy', '.25em') - .attr('text-anchor', 'right') - .on('mouseover', function(d) { - store.dispatch(activateGraphTooltipWindow( - d.label, - d.attributes, - d3.event.pageX, - d3.event.pageY - )); - }) - .on('mouseout', function(_d) { - store.dispatch(closeGraphTooltipWindow()); - }); - - var node = this.svg.selectAll('.node') - .data(this.force.nodes()) - .enter().append('g') - .attr('class', 'node') - .call(this.force.drag); - - // A map from group ID to image URL. - var imageByGroup = { - 'instance': 'ic_computer_black_48dp_2x.png', - 'pnic': 'ic_dns_black_48dp_2x.png', - 'vconnector': 'ic_settings_input_composite_black_48dp_2x.png', - // 'network': 'ic_cloud_queue_black_48dp_2x.png', - 'network': 'ic_cloud_queue_black_48dp_2x.png', - 'vedge': 'ic_gamepad_black_48dp_2x.png', - 'vservice': 'ic_storage_black_48dp_2x.png', - 'vnic': 'ic_settings_input_hdmi_black_48dp_2x.png', - 'otep':'ic_keyboard_return_black_48dp_2x.png', - 'default':'ic_lens_black_48dp_2x.png' - }; - - node.append('image') - //.attr('xlink:href', 'https://github.com/favicon.ico') - .attr('xlink:href', function(d) { - if(imageByGroup[d.type]){ - return `/${imageByGroup[d.type]}`; - } - else{ - return `/${imageByGroup['default']}`; - } - - }) - .attr('x', -8) - .attr('y', -8) - .attr('width', 36) - .attr('height', 36) - //node.append('circle') - .attr('class', 'node') - //.attr('r', function(d){return 13;}) - .on('mouseover', function(d) { - store.dispatch(activateGraphTooltipWindow( - d.name, - d.attributes, - d3.event.pageX, - d3.event.pageY)); - }) - .on('mouseout', function(_d) { - store.dispatch(closeGraphTooltipWindow()); - }) - .on('click', function(d) { - if (d.type === 'vedge') { - store.dispatch(activateVedgeInfoWindow( - d, - d3.event.pageX, - d3.event.pageY)); - } - }) - .style('fill', function(d) { - if(d.state == 'error'){ - self.blinkNode(d); - return 'red'; - } - return self.color(d.group); - }) - .call(this.force.drag); - - - /* - .each(function() { - var sel = d3.select(this); - var state = false; - sel.on('dblclick', function () { - state = !state; - if (state) { - sel.style('fill', 'black'); - } else { - sel.style('fill', function (d) { - return d.colr; - }); - } - }); - }); - */ - - node.append('text') - .attr('dx', 0) - .attr('dy', 40) - .text(function(d) { return d.object_name; }); - - - this.force.on('tick', function() { - link.attr('x1', function(d) { return d.source.x; }) - .attr('y1', function(d) { return d.source.y; }) - .attr('x2', function(d) { return d.target.x; }) - .attr('y2', function(d) { return d.target.y; }); - /* - .attr('dr1', function(d) { return 75/d.source.linknum; }) - .attr('dr2', function(d) { return 75/d.target.linknum; }); - */ - - node.attr('transform', function(d) { - return 'translate(' + d.x + ',' + d.y + ')'; - }); - - linkText - .attr('x', function(d) { - return (d.source.x + (d.target.x - d.source.x) * 0.5); - }) - .attr('y', function(d) { - return (d.source.y + (d.target.y - d.source.y) * 0.5); - }); - }); - - }, - - centerview: function () { - // Center the view on the molecule(s) and scale it so that everything - // fits in the window - var width = 500; - var height = 500; - - if (this.graph === null) return; - - var nodes = this.graph.nodes; - - //no molecules, nothing to do - if (nodes.length === 0) return; - - // Get the bounding box - var min_x = d3.min(nodes.map(function(d) {return d.x;})); - var min_y = d3.min(nodes.map(function(d) {return d.y;})); - - var max_x = d3.max(nodes.map(function(d) {return d.x;})); - var max_y = d3.max(nodes.map(function(d) {return d.y;})); - - - // The width and the height of the graph - var mol_width = max_x - min_x; - var mol_height = max_y - min_y; - - // how much larger the drawing area is than the width and the height - var width_ratio = width / mol_width; - var height_ratio = height / mol_height; - - // we need to fit it in both directions, so we scale according to - // the direction in which we need to shrink the most - var min_ratio = Math.min(width_ratio, height_ratio) * 0.8; - - // the new dimensions of the molecule - var new_mol_width = mol_width * min_ratio; - var new_mol_height = mol_height * min_ratio; - - // translate so that it's in the center of the window - var x_trans = -(min_x) * min_ratio + (width - new_mol_width) / 2; - var y_trans = -(min_y) * min_ratio + (height - new_mol_height) / 2; - - - // do the actual moving - d3Graph.svg.attr('transform', - 'translate(' + [x_trans, y_trans] + ')' + ' scale(' + min_ratio + ')'); - - // tell the zoomer what we did so that next we zoom, it uses the - // transformation we entered here - //d3Graph.zoomer.translate([x_trans, y_trans ]); - //d3Graph.zoomer.scale(min_ratio); - }, - - keydown:function() { -/* - shiftKey = d3.event.shiftKey || d3.event.metaKey; - ctrlKey = d3.event.ctrlKey; -*/ - if(d3.event===null) return; - - console.log('d3.event', d3.event); - - if (d3.event.keyCode == 67) { //the 'c' key - this.centerview(); - } - - }, - - blinkNode: function(node){ - var nodeList = this.svg.selectAll('.node'); - var selected = nodeList.filter(function (d, _i) { - return d.id == node.id; - //return d.name != findFromParent; - }); - selected.forEach(function(n){ - for (var i = 0; i != 30; i++) { - $(n[1]).fadeTo('slow', 0.1).fadeTo('slow', 5.0); - } - }); - }, - - blinkLink: function(link){ - var linkList = this.svg.selectAll('.link'); - var selected = linkList.filter(function (d, _i) { - return d.label == link.label; - //return d.id == link.id; - //return d.name != findFromParent; - }); - selected.forEach(function(n){ - for (var i = 0; i != 30; i++) { - $(n[0]).fadeTo('slow', 0.1).fadeTo('slow', 5.0); - } - }); - }, - - tick:function(obj){ - obj.link.attr('x1', function(d) { return d.source.x; }) - .attr('y1', function(d) { return d.source.y; }) - .attr('x2', function(d) { return d.target.x; }) - .attr('y2', function(d) { return d.target.y; }); - - obj.node.attr('transform', function(d) { - return 'translate(' + d.x + ',' + d.y + ')'; - }); - - obj.linkText - .attr('x', function(d) { - return (d.source.x + (d.target.x - d.source.x) * 0.5); - }) - .attr('y', function(d) { - return (d.source.y + (d.target.y - d.source.y) * 0.5); - }); - } -}; - -export { d3Graph }; diff --git a/ui/imports/lib/d3three.js b/ui/imports/lib/d3three.js deleted file mode 100644 index 51493f2..0000000 --- a/ui/imports/lib/d3three.js +++ /dev/null @@ -1,789 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -var chartOffset = 0; - -// D3.layout.force3d.js -// (C) 2012 ziggy.jonsson.nyc@gmail.com -// BSD license (http://opensource.org/licenses/BSD-3-Clause) - -d3.layout.force3d = function() { - var forceXY = d3.layout.force() - ,forceZ = d3.layout.force() - ,zNodes = {} - ,zLinks = {} - ,nodeID = 1 - ,linkID = 1 - ,tickFunction = Object - - var force3d = {} - - Object.keys(forceXY).forEach(function(d) { - force3d[d] = function() { - var result = forceXY[d].apply(this,arguments) - if (d !="nodes" && d!="links") forceZ[d].apply(this,arguments) - return (result == forceXY) ? force3d : result - } - }) - - - force3d.on = function(name,fn) { - tickFunction = fn - return force3d - } - - - forceXY.on("tick",function() { - - // Refresh zNodes add new, delete removed - var _zNodes = {} - forceXY.nodes().forEach(function(d,i) { - if (!d.id) d.id = nodeID++ - _zNodes[d.id] = zNodes[d.id] || {x:d.z,px:d.z,py:d.z,y:d.z,id:d.id} - d.z = _zNodes[d.id].x - }) - zNodes = _zNodes - - // Refresh zLinks add new, delete removed - var _zLinks = {} - forceXY.links().forEach(function(d) { - var nytt = false - if (!d.linkID) { d.linkID = linkID++;nytt=true} - _zLinks[d.linkID] = zLinks[d.linkID] || {target:zNodes[d.target.id],source:zNodes[d.source.id]} - - }) - zLinks = _zLinks - - // Update the nodes/links in forceZ - forceZ.nodes(d3.values(zNodes)) - forceZ.links(d3.values(zLinks)) - forceZ.start() // Need to kick forceZ so we don't lose the update mechanism - - // And run the user defined function, if defined - tickFunction() - }) - - // Expose the sub-forces for debugging purposes - force3d.xy = forceXY - force3d.z = forceZ - - return force3d -} -// end of d3.layout.force3d.js - -// Override default functions for d3 -THREE.Object3D.prototype.appendChild = function (c) { - this.add(c); - return c; -}; -THREE.Object3D.prototype.querySelectorAll = function () { return []; }; - -// this one is to use D3's .attr() on THREE's objects -THREE.Object3D.prototype.setAttribute = function (name, value) { - var chain = name.split('.'); - var object = this; - for (var i = 0; i < chain.length - 1; i++) { - object = object[chain[i]]; - } - object[chain[chain.length - 1]] = value; -} - -// d3three object -D3THREE = function(singleton) { - this.labelGroup = new THREE.Object3D(); - this.maxY = 0; - this.axisObjects = {}; - - this.running = true; - - if (singleton) { - if (typeof(d3three) !== 'undefined') { - d3three.stop(); - } - d3three = this; - } - - //if (!singleton) { - // d3threes.push(this); - //} -} - -D3THREE.prototype.init = function(divId) { - // standard THREE stuff, straight from examples - this.renderer = new THREE.WebGLRenderer({antialias: true, alpha : true, preserveDrawingBuffer: true}); - this.renderer.shadowMap.enabled = true; - this.renderer.shadowMap.type = THREE.PCFSoftShadow; - this.renderer.shadowMapSoft = true; - this.renderer.shadowCameraNear = 1000; - this.renderer.shadowCameraFar = 10000; - this.renderer.shadowCameraFov = 50; - this.renderer.shadowMapBias = 0.0039; - this.renderer.shadowMapDarkness = 0.25; - this.renderer.shadowMapWidth = 10000; - this.renderer.shadowMapHeight = 10000; - this.renderer.physicallyBasedShading = true; - - this.divId = divId; - this.width = document.getElementById(divId).offsetWidth; - this.height = document.getElementById(divId).offsetHeight; - - this.renderer.setSize( this.width, this.height ); - - document.getElementById(divId).appendChild( this.renderer.domElement ); - - this.camera = new THREE.PerspectiveCamera( 30, this.width / this.height, 1, 100000 ); - this.camera.position.z = -1000; - this.camera.position.x = -800; - this.camera.position.y = 600; - - this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement ); - - this.scene = new THREE.Scene(); - - this.defaultLight = new THREE.AmbientLight( 0xbbbbb ); // soft white light - this.scene.add( this.defaultLight ); - - this.scene.add(this.labelGroup); - - var self = this; - window.addEventListener( 'resize', self.onWindowResize.bind(self), false ); -} - -D3THREE.prototype.onWindowResize = function() { - var self = this; - self.camera.aspect = self.width / self.height; - self.camera.updateProjectionMatrix(); - - self.renderer.setSize( self.width, self.height ); -} - -D3THREE.prototype.animate = function() { - var self = this; - if (this.running) { - setTimeout( function() { - this.requestId = requestAnimationFrame( self.animate.bind(self) ); - }, 1000 / 15 ); - - self.renderer.render( self.scene, self.camera ); - self.controls.update(); - - self.labelGroup.children.forEach(function(l){ - l.rotation.setFromRotationMatrix(self.camera.matrix, "YXZ"); - l.rotation.x = 0; - l.rotation.z = 0; - }); - } else { - window.removeEventListener( 'resize', self.onWindowResize.bind(self) ); - while (self.scene.children.length > 0) { - var childObject = self.scene.children[0]; - if (childObject.geometry) { - childObject.geometry.dispose(); - } - if (childObject.material) { - childObject.material.dispose(); - } - self.scene.remove(childObject); - delete(childObject); - } - - self.renderer.context = null; - self.renderer.domElement = null; - self.renderer = null; - - self.camera = null; - self.controls = null; - self.scene = null; - self.labelGroup = null; - - cancelAnimationFrame(self.requestId); - } -} - -D3THREE.prototype.stop = function() { - this.running = false; -} - -D3THREE.prototype.render = function(element, data) { - element.render(data); -} - -D3THREE.createAxis = function(dt) { - return new D3THREE.Axis(dt); -} - -// d3three axis -D3THREE.Axis = function(dt) { - this._scale = d3.scale.linear(); - this._orient = "x"; - this._tickFormat = function(d) { return d }; - this._dt = dt; -} - -D3THREE.Axis.prototype.orient = function(o) { - if (o) { - this._dt.axisObjects[o] = this; - this._orient = o; - } - return this; -} - -D3THREE.Axis.prototype.scale = function(s) { - if (s) { - this._scale = s; - } - return this; -} - -D3THREE.Axis.prototype.tickFormat = function(f) { - if (f) { - this._tickFormat = f; - } - return this; -} - -D3THREE.Axis.prototype.interval = function() { - var interval; - if (typeof(this._scale.rangeBand) === 'function') { - // ordinal scale - interval = this._scale.range()[1]; - } else { - interval = this._scale.range()[1] / (this._scale.ticks().length - 1); - } - return interval; -} - -D3THREE.Axis.prototype.ticks = function() { - var ticks; - if (typeof(this._scale.rangeBand) === 'function') { - // ordinal scale - ticks = this._scale.domain(); - } else { - ticks = this._scale.ticks(); - } - return ticks; -} - -D3THREE.Axis.prototype.getRotationShift = function() { - return this.interval() * (this.ticks().length - 1) / 2; -} - -D3THREE.Axis.prototype.render = function() { - var material = new THREE.LineBasicMaterial({ - color: 0xbbbbbb, - linewidth: 2 - }); - - var tickMaterial = new THREE.LineBasicMaterial({ - color: 0xbbbbbb, - linewidth: 1 - }); - - var geometry = new THREE.Geometry(); - - interval = this.interval(); - - var interval = this.interval(), ticks = this.ticks(); - - // x,y axis shift, so rotation is from center of screen - var xAxisShift = this._dt.axisObjects.x.getRotationShift(), - yAxisShift = this._dt.axisObjects.y.getRotationShift(); - - for (var i = 0; i < ticks.length; i++) { - var tickMarGeometry = new THREE.Geometry(); - - var shape = new THREE.TextGeometry(this._tickFormat(ticks[i]), - { - size: 5, - height: 1, - curveSegments: 20 - }); - var wrapper = new THREE.MeshBasicMaterial({color: 0xbbbbbb}); - var words = new THREE.Mesh(shape, wrapper); - - if (this._orient === "y") { - // tick - geometry.vertices.push(new THREE.Vector3(i * interval - yAxisShift, chartOffset, 0 - xAxisShift)); - - tickMarGeometry.vertices.push(new THREE.Vector3(i * interval - yAxisShift, chartOffset, 0 - xAxisShift)); - tickMarGeometry.vertices.push(new THREE.Vector3(i * interval - yAxisShift, -10 + chartOffset, 0 - xAxisShift)); - var tickLine = new THREE.Line(tickMarGeometry, tickMaterial); - this._dt.scene.add(tickLine); - - if (i * interval > this._dt.maxY) { - this._dt.maxY = i * interval; - } - - words.position.set(i * interval - yAxisShift, -20 + chartOffset, 0 - xAxisShift); - } else if (this._orient === "z") { - // tick - geometry.vertices.push(new THREE.Vector3(0 + this._dt.maxY - yAxisShift, i * interval + chartOffset, 0 - xAxisShift)); - - tickMarGeometry.vertices.push(new THREE.Vector3(0 + this._dt.maxY - yAxisShift, i * interval + chartOffset, 0 - xAxisShift)); - tickMarGeometry.vertices.push(new THREE.Vector3(10 + this._dt.maxY - yAxisShift, i * interval + chartOffset, 0 - xAxisShift)); - var tickLine = new THREE.Line(tickMarGeometry, tickMaterial); - this._dt.scene.add(tickLine); - - words.position.set(20 + this._dt.maxY - yAxisShift, i * interval + chartOffset, 0 - xAxisShift); - } else if (this._orient === "x") { - // tick - geometry.vertices.push(new THREE.Vector3(0 - yAxisShift, chartOffset, i * interval - xAxisShift)); - - tickMarGeometry.vertices.push(new THREE.Vector3(0 - yAxisShift, 0 + chartOffset, i * interval - xAxisShift)); - tickMarGeometry.vertices.push(new THREE.Vector3(0 - yAxisShift, -10 + chartOffset, i * interval - xAxisShift)); - var tickLine = new THREE.Line(tickMarGeometry, tickMaterial); - this._dt.scene.add(tickLine); - - words.position.set(0 - yAxisShift, -20 + chartOffset, i * interval - xAxisShift); - } - - this._dt.labelGroup.add(words); - } - - var line = new THREE.Line(geometry, material); - - this._dt.scene.add(line); -} - -// Chart object -D3THREE.Chart = function() { -} - -D3THREE.Chart.prototype.config = function(c) { - this._config = $.extend(this._config, c); -} - -D3THREE.Chart.prototype.init = function(dt) { - this._dt = dt; - // mouse move - var self = this; - this._dt.renderer.domElement.addEventListener( 'mousemove', function(e) { - self.onDocumentMouseMove(e); - }, false ); -} - -var cumulativeOffset = function(element) { - var top = 0, left = 0; - do { - top += element.offsetTop || 0; - left += element.offsetLeft || 0; - element = element.offsetParent; - } while(element); - - return { - top: top, - left: left - }; -}; - -D3THREE.Chart.prototype.detectNodeHover = function(e) { - var boundingRect = this._dt.renderer.domElement.getBoundingClientRect(); - - var vector = new THREE.Vector3(); - vector.x = ( (e.clientX - boundingRect.left) / this._dt.renderer.domElement.width ) * 2 - 1; - vector.y = 1 - ( (e.clientY - boundingRect.top) / this._dt.renderer.domElement.height ) * 2; - vector.z = 1; - - // create a check ray - vector.unproject( this._dt.camera ); - var ray = new THREE.Raycaster( this._dt.camera.position, - vector.sub( this._dt.camera.position ).normalize() ); - - var intersects = ray.intersectObjects( this._nodeGroup.children ); - - for (var i = 0; i < this._nodeGroup.children.length; i++) { - this._nodeGroup.children[i].material.opacity = 1; - } - - if (intersects.length > 0) { - var obj = intersects[0].object; - obj.material.opacity = 0.5; - - var html = ""; - - html += "
"; - html += ""; - html += "x: " + this._dt.axisObjects.x._tickFormat(obj.userData.x); - html += "
"; - html += ""; - html += "y: " + this._dt.axisObjects.y._tickFormat(obj.userData.y); - html += "
"; - html += ""; - html += "z: " + this._dt.axisObjects.z._tickFormat(obj.userData.z); - html += "
"; - html += "
"; - - document.getElementById("tooltip-container").innerHTML = html; - document.getElementById("tooltip-container").style.display = "block"; - - document.getElementById("tooltip-container").style.top = (e.pageY + 10) + "px"; - document.getElementById("tooltip-container").style.left = (e.pageX + 10) + "px"; - } else { - document.getElementById("tooltip-container").style.display = "none"; - } -} - -// Scatter plot -D3THREE.Scatter = function(dt) { - this.init(dt); - - this._nodeGroup = new THREE.Object3D(); - - this._config = {color: 0x4682B4, pointRadius: 5}; -} - -D3THREE.Scatter.prototype = new D3THREE.Chart(); - -D3THREE.Scatter.prototype.onDocumentMouseMove = function(e) { - // detect intersected spheres - this.detectNodeHover(e); -} - -D3THREE.Scatter.prototype.render = function(data) { - var geometry = new THREE.SphereGeometry( this._config.pointRadius, 32, 32 ); - - this._dt.scene.add(this._nodeGroup); - - // x,y axis shift, so rotation is from center of screen - var xAxisShift = this._dt.axisObjects.x.getRotationShift(), - yAxisShift = this._dt.axisObjects.y.getRotationShift(); - - var self = this; - d3.select(this._nodeGroup) - .selectAll() - .data(data) - .enter().append( function(d) { - var material = new THREE.MeshBasicMaterial( { - color: self._config.color } ); - var mesh = new THREE.Mesh( geometry, material ); - mesh.userData = {x: d.x, y: d.y, z: d.z}; - return mesh; - } ) - .attr("position.z", function(d) { - return self._dt.axisObjects.x._scale(d.x) - xAxisShift; - }) - .attr("position.x", function(d) { - return self._dt.axisObjects.y._scale(d.y) - yAxisShift; - }) - .attr("position.y", function(d) { - return self._dt.axisObjects.z._scale(d.z) + chartOffset; - }); -} - -// Surface plot -D3THREE.Surface = function(dt) { - this.init(dt); - - this._nodeGroup = new THREE.Object3D(); - - this._config = {color: 0x4682B4, pointColor: 0xff7f0e, pointRadius: 2}; -} - -D3THREE.Surface.prototype = new D3THREE.Chart(); - -D3THREE.Surface.prototype.onDocumentMouseMove = function(e) { - // detect intersected spheres - var boundingRect = this._dt.renderer.domElement.getBoundingClientRect(); - - var vector = new THREE.Vector3(); - vector.x = ( (e.clientX - boundingRect.left) / this._dt.renderer.domElement.width ) * 2 - 1; - vector.y = 1 - ( (e.clientY - boundingRect.top) / this._dt.renderer.domElement.height ) * 2; - vector.z = 1; - - // create a check ray - vector.unproject( this._dt.camera ); - var ray = new THREE.Raycaster( this._dt.camera.position, - vector.sub( this._dt.camera.position ).normalize() ); - - var meshIntersects = ray.intersectObjects( [this._meshSurface] ); - - if (meshIntersects.length > 0) { - for (var i = 0; i < this._nodeGroup.children.length; i++) { - this._nodeGroup.children[i].visible = true; - this._nodeGroup.children[i].material.opacity = 1; - } - - this.detectNodeHover(e); - } else { - // hide nodes - for (var i = 0; i < this._nodeGroup.children.length; i++) { - this._nodeGroup.children[i].visible = false; - } - } -} - -D3THREE.Surface.prototype.render = function(threeData) { - /* render data points */ - var geometry = new THREE.SphereGeometry( this._config.pointRadius, 32, 32 ); - - this._dt.scene.add(this._nodeGroup); - - // x,y axis shift, so rotation is from center of screen - var xAxisShift = this._dt.axisObjects.x.getRotationShift(), - yAxisShift = this._dt.axisObjects.y.getRotationShift(); - - var self = this; - d3.select(this._nodeGroup) - .selectAll() - .data(threeData) - .enter().append( function(d) { - var material = new THREE.MeshBasicMaterial( { - color: self._config.pointColor } ); - var mesh = new THREE.Mesh( geometry, material ); - mesh.userData = {x: d.x, y: d.y, z: d.z}; - mesh.visible = false; - return mesh; - } ) - .attr("position.z", function(d) { - return self._dt.axisObjects.x._scale(d.x) - xAxisShift; - }) - .attr("position.x", function(d) { - return self._dt.axisObjects.y._scale(d.y) - yAxisShift; - }) - .attr("position.y", function(d) { - return self._dt.axisObjects.z._scale(d.z) + chartOffset; - }); - - /* custom surface */ - function distance (v1, v2) - { - var dx = v1.x - v2.x; - var dy = v1.y - v2.y; - var dz = v1.z - v2.z; - - return Math.sqrt(dx*dx+dz*dz); - } - - var vertices = []; - var holes = []; - var triangles, mesh; - var geometry = new THREE.Geometry(); - var material = new THREE.MeshBasicMaterial({color: this._config.color}); - - for (var i = 0; i < threeData.length; i++) { - vertices.push(new THREE.Vector3( - self._dt.axisObjects.y._scale(threeData[i].y) - yAxisShift, - self._dt.axisObjects.z._scale(threeData[i].z) + chartOffset, - self._dt.axisObjects.x._scale(threeData[i].x) - xAxisShift)); - } - - geometry.vertices = vertices; - - for (var i = 0; i < vertices.length; i++) { - // find three closest vertices to generate surface - var v1, v2, v3; - var distances = []; - - // find vertices in same y or y + 1 row - var minY = Number.MAX_VALUE; - for (var j = i + 1; j < vertices.length; j++) { - if (i !== j && vertices[j].x > vertices[i].x) { - if (vertices[j].x < minY) { - minY = vertices[j].x; - } - } - } - - var rowVertices = [], row2Vertices = []; - for (var j = i + 1; j < vertices.length; j++) { - if (i !== j && (vertices[j].x === vertices[i].x)) { - rowVertices.push({index: j, v: vertices[j]}); - } - if (i !== j && (vertices[j].x === minY)) { - row2Vertices.push({index: j, v: vertices[j]}); - } - } - - if (rowVertices.length >= 1 && row2Vertices.length >= 2) { - // find smallest x - rowVertices.sort(function(a, b) { - if (a.v.z < b.v.z) { - return -1; - } else if (a.v.z === b.v.z) { - return 0; - } else { - return 1; - } - }); - - v1 = rowVertices[0].index; - - row2Vertices.sort(function(a, b) { - if (a.v.z < b.v.z) { - return -1; - } else if (a.v.z === b.v.z) { - return 0; - } else { - return 1; - } - }); - - v2 = row2Vertices[0].index; - v3 = row2Vertices[1].index; - - var fv = [i, v1, v2, v3]; - fv = fv.sort(function(a, b) { - if (a < b) return -1; - else if (a === b) return 0; - else return 1; - }); - - geometry.faces.push( new THREE.Face3(fv[1], fv[0], fv[3])); - geometry.faces.push( new THREE.Face3(fv[0], fv[2], fv[3])); - } - } - - this._meshSurface = new THREE.Mesh( geometry, material ); - this._dt.scene.add(this._meshSurface); -} - -// Bar plot -D3THREE.Bar = function(dt) { - this.init(dt); - - this._nodeGroup = new THREE.Object3D(); - - this._config = {color: 0x4682B4, barSize: 5}; -} - -D3THREE.Bar.prototype = new D3THREE.Chart(); - -D3THREE.Bar.prototype.onDocumentMouseMove = function(e) { - this.detectNodeHover(e); -} - -D3THREE.Bar.prototype.render = function(threeData) { - /* render data points */ - this._dt.scene.add(this._nodeGroup); - - // x,y axis shift, so rotation is from center of screen - var xAxisShift = this._dt.axisObjects.x.getRotationShift(), - yAxisShift = this._dt.axisObjects.y.getRotationShift(); - - var self = this; - d3.select(this._nodeGroup) - .selectAll() - .data(threeData) - .enter().append( function(d) { - var height = self._dt.axisObjects.z._scale(d.z) + chartOffset; - var geometry = new THREE.BoxGeometry( self._config.barSize, height, self._config.barSize ); - var material = new THREE.MeshBasicMaterial( { - color: self._config.color } ); - var mesh = new THREE.Mesh( geometry, material ); - mesh.userData = {x: d.x, y: d.y, z: d.z}; - return mesh; - } ) - .attr("position.z", function(d) { - return self._dt.axisObjects.x._scale(d.x) - xAxisShift; - }) - .attr("position.x", function(d) { - return self._dt.axisObjects.y._scale(d.y) - yAxisShift; - }) - .attr("position.y", function(d) { - var height = self._dt.axisObjects.z._scale(d.z) + chartOffset; - return height / 2; - }); -} - -// Force layout plot -D3THREE.Force = function(dt) { - this.init(dt); - - this._nodeGroup = new THREE.Object3D(); - - this._config = {color: 0x4682B4, linkColor: 0xcccccc, linkWidth: 1}; -} - -D3THREE.Force.prototype = new D3THREE.Chart(); - -D3THREE.Force.prototype.onDocumentMouseMove = function(e) { -} - -D3THREE.Force.prototype.render = function(threeData) { - var spheres = [], three_links = []; - // Define the 3d force - var force = d3.layout.force3d() - .nodes(sort_data=[]) - .links(links=[]) - .size([50, 50]) - .gravity(0.3) - .charge(-400) - - var DISTANCE = 1; - - for (var i = 0; i < threeData.nodes.length; i++) { - sort_data.push({x:threeData.nodes.x + DISTANCE,y:threeData.nodes.y + DISTANCE,z:0}) - - // set up the sphere vars - var radius = 5, - segments = 16, - rings = 16; - - // create the sphere's material - var sphereMaterial = new THREE.MeshLambertMaterial({ color: this._config.color }); - - var sphere = new THREE.Mesh( - new THREE.SphereGeometry( - radius, - segments, - rings), - sphereMaterial); - - spheres.push(sphere); - - // add the sphere to the scene - this._dt.scene.add(sphere); - } - - for (var i = 0; i < threeData.links.length; i++) { - links.push({target:sort_data[threeData.links[i].target],source:sort_data[threeData.links[i].source]}); - - var material = new THREE.LineBasicMaterial({ color: this._config.linkColor, - linewidth: this._config.linkWidth}); - var geometry = new THREE.Geometry(); - - geometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) ); - geometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) ); - var line = new THREE.Line( geometry, material ); - line.userData = { source: threeData.links[i].source, - target: threeData.links[i].target }; - three_links.push(line); - this._dt.scene.add(line); - - force.start(); - } - - // set up the axes - var x = d3.scale.linear().domain([0, 350]).range([0, 10]), - y = d3.scale.linear().domain([0, 350]).range([0, 10]), - z = d3.scale.linear().domain([0, 350]).range([0, 10]); - - var self = this; - force.on("tick", function(e) { - for (var i = 0; i < sort_data.length; i++) { - spheres[i].position.set(x(sort_data[i].x) * 40 - 40, y(sort_data[i].y) * 40 - 40,z(sort_data[i].z) * 40 - 40); - - for (var j = 0; j < three_links.length; j++) { - var line = three_links[j]; - var vi = -1; - if (line.userData.source === i) { - vi = 0; - } - if (line.userData.target === i) { - vi = 1; - } - - if (vi >= 0) { - line.geometry.vertices[vi].x = x(sort_data[i].x) * 40 - 40; - line.geometry.vertices[vi].y = y(sort_data[i].y) * 40 - 40; - line.geometry.vertices[vi].z = y(sort_data[i].z) * 40 - 40; - line.geometry.verticesNeedUpdate = true; - } - } - } - }); -} diff --git a/ui/imports/lib/general-regex.js b/ui/imports/lib/general-regex.js deleted file mode 100644 index 184a63a..0000000 --- a/ui/imports/lib/general-regex.js +++ /dev/null @@ -1,15 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export const portRegEx = /^0*(?:6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$/; - -export const pathRegEx = /^(\/){1}([^\/\0]+(\/)?)+$/; - -export const hostnameRegex= new RegExp('^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$'); - -export const ipAddressRegex = new RegExp('(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}'); diff --git a/ui/imports/lib/icon.js b/ui/imports/lib/icon.js deleted file mode 100644 index 1653bc2..0000000 --- a/ui/imports/lib/icon.js +++ /dev/null @@ -1,14 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export class Icon { - constructor({type, name}) { - this.type = type; - this.name = name; - } -} diff --git a/ui/imports/lib/images-for-node-type.js b/ui/imports/lib/images-for-node-type.js deleted file mode 100644 index d16ce00..0000000 --- a/ui/imports/lib/images-for-node-type.js +++ /dev/null @@ -1,77 +0,0 @@ -export let imagesForNodeType = { - 'instance': { - default: 'ic_computer_black_48dp_2x.png', - ok: 'ic_computer_black_48dp_2x-green.png', - warning: 'ic_computer_black_48dp_2x-orange.png', - error: 'ic_computer_black_48dp_2x-red.png', - }, - 'pnic': { - default: 'ic_dns_black_48dp_2x.png', - ok: 'ic_dns_black_48dp_2x-green.png', - warning: 'ic_dns_black_48dp_2x-orange.png', - error: 'ic_dns_black_48dp_2x-red.png', - }, - 'host_pnic': { - default: 'ic_device_hub_black_24dp_2x.png', - ok: 'ic_device_hub_black_24dp_2x-green.png', - warning: 'ic_device_hub_black_24dp_2x-orange.png', - error: 'ic_device_hub_black_24dp_2x-red.png', - }, - 'switch_pnic': { - default: 'ic_device_hub_black_24dp_2x.png', - ok: 'ic_device_hub_black_24dp_2x-green.png', - warning: 'ic_device_hub_black_24dp_2x-orange.png', - error: 'ic_device_hub_black_24dp_2x-red.png', - }, - 'vconnector': { - default: 'ic_settings_input_composite_black_48dp_2x.png', - ok: 'ic_settings_input_composite_black_48dp_2x-green.png', - warning: 'ic_settings_input_composite_black_48dp_2x-orange.png', - error: 'ic_settings_input_composite_black_48dp_2x-red.png', - }, - // 'network': 'ic_cloud_queue_black_48dp_2x.png', - 'network': { - default: 'ic_cloud_queue_black_48dp_2x.png', - ok: 'ic_cloud_queue_black_48dp_2x-green.png', - warning: 'ic_cloud_queue_black_48dp_2x-orange.png', - error: 'ic_cloud_queue_black_48dp_2x-red.png', - }, - 'vedge': { - default: 'ic_gamepad_black_48dp_2x.png', - ok: 'ic_gamepad_black_48dp_2x-green.png', - warning: 'ic_gamepad_black_48dp_2x-orange.png', - error: 'ic_gamepad_black_48dp_2x-red.png', - }, - 'vservice': { - default: 'ic_storage_black_48dp_2x.png', - ok: 'ic_storage_black_48dp_2x-green.png', - warning: 'ic_storage_black_48dp_2x-orange.png', - error: 'ic_storage_black_48dp_2x-red.png', - }, - 'vnic': { - default: 'ic_settings_input_hdmi_black_48dp_2x.png', - ok: 'ic_settings_input_hdmi_black_48dp_2x-green.png', - warning: 'ic_settings_input_hdmi_black_48dp_2x-orange.png', - error: 'ic_settings_input_hdmi_black_48dp_2x-red.png', - }, - 'otep': { - default: 'ic_keyboard_return_black_48dp_2x.png', - ok: 'ic_keyboard_return_black_48dp_2x-green.png', - warning: 'ic_keyboard_return_black_48dp_2x-orange.png', - error: 'ic_keyboard_return_black_48dp_2x-red.png', - }, - 'view_group-host': { - default: 'ic_tv_black_24dp_2x.png' - }, - 'view_group-switch': { - default: 'ic_zoom_out_map_black_24dp_2x.png' - }, -}; - -export let defaultNodeTypeImage = { - default: 'ic_lens_black_48dp_2x.png', - ok: 'ic_lens_black_48dp_2x-green.png', - warning: 'ic_lens_black_48dp_2x-orange.png', - error: 'ic_lens_black_48dp_2x-red.png', -}; - diff --git a/ui/imports/lib/regex-utils.js b/ui/imports/lib/regex-utils.js deleted file mode 100644 index fd9bce2..0000000 --- a/ui/imports/lib/regex-utils.js +++ /dev/null @@ -1,11 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -export function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); -} diff --git a/ui/imports/lib/simple-schema-utils.js b/ui/imports/lib/simple-schema-utils.js deleted file mode 100644 index 3f2840b..0000000 --- a/ui/imports/lib/simple-schema-utils.js +++ /dev/null @@ -1,15 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -export let _idFieldDef = { - type: { - _str: { type: String, regEx: SimpleSchema.RegEx.Id } - } -}; diff --git a/ui/imports/lib/utilities.js b/ui/imports/lib/utilities.js deleted file mode 100644 index e1143a3..0000000 --- a/ui/imports/lib/utilities.js +++ /dev/null @@ -1,54 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; - -export function idToStr(orgId) { - return R.ifElse(R.is(Mongo.ObjectID), - function (id) { return id.toHexString() + ':' + 'objectid'; }, - R.identity - )(orgId); -} - -export function parseReqId(pId) { - let idMatch = R.match(/(.*):objectid$/, pId); - if (idMatch.length === 0) { - return { - type: 'string', - id: pId - }; - } else { - return { - type: 'objectid', - id: new Mongo.ObjectID(idMatch[1]) - }; - } -} - -function calcColor(level) { - let r = 11; - let g = 122; - let b = 209; - //let a = 1; - let factor = level / 15; - factor = factor < 0 ? 0 : 1 - factor; - - let nR = Math.floor(r * factor); - let nG = Math.floor(g * factor); - let nB = Math.floor(b * factor); - //let nA = a; - let colorStr = R.reduce((acc, colorPart) => { - let digits = colorPart.toString(16); - if (colorPart < 16) { digits = '0' + digits; } - return acc + digits; - }, '#', [nR, nG, nB]); - - return colorStr; -} - -export let calcColorMem = R.memoize(calcColor); diff --git a/ui/imports/startup/both/config.js b/ui/imports/startup/both/config.js deleted file mode 100644 index ac7c9a2..0000000 --- a/ui/imports/startup/both/config.js +++ /dev/null @@ -1,9 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import './configs/accounts'; diff --git a/ui/imports/startup/both/configs/accounts.js b/ui/imports/startup/both/configs/accounts.js deleted file mode 100644 index 2653abe..0000000 --- a/ui/imports/startup/both/configs/accounts.js +++ /dev/null @@ -1,9 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// - diff --git a/ui/imports/startup/both/index.js b/ui/imports/startup/both/index.js deleted file mode 100644 index 62d0ef5..0000000 --- a/ui/imports/startup/both/index.js +++ /dev/null @@ -1,10 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import '/imports/api/simple-schema.init'; -import './config'; diff --git a/ui/imports/startup/client/index.js b/ui/imports/startup/client/index.js deleted file mode 100644 index 6439511..0000000 --- a/ui/imports/startup/client/index.js +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import './template-helpers.js'; - -import '/imports/ui/store/store'; -import '/imports/ui/components/landing/landing'; -import '/imports/ui/components/main/main'; -import '/imports/ui/components/loading/loading'; -import '/imports/ui/components/top-navbar-menu/top-navbar-menu'; -import '/imports/ui/components/environment/environment'; -import '/imports/ui/components/environment-wizard/environment-wizard'; -import '/imports/ui/components/scanning-request/scanning-request'; -import '/imports/ui/components/scheduled-scan/scheduled-scan'; -import '/imports/ui/components/project-dashboard/project-dashboard'; -import '/imports/ui/components/region-dashboard/region-dashboard'; -import '/imports/ui/components/zone-dashboard/zone-dashboard'; -import '/imports/ui/components/host-dashboard/host-dashboard'; -import '/imports/ui/components/aggregate-dashboard/aggregate-dashboard'; -import '/imports/ui/components/scans-list/scans-list'; -import '/imports/ui/components/scheduled-scans-list/scheduled-scans-list'; -import '/imports/ui/components/link-types-list/link-types-list'; -import '/imports/ui/components/link-type/link-type'; -import '/imports/ui/components/clique-types-list/clique-types-list'; -import '/imports/ui/components/clique-type/clique-type'; -import '/imports/ui/components/clique-constraints-list/clique-constraints-list'; -import '/imports/ui/components/clique-constraint/clique-constraint'; -import '/imports/ui/components/user-list/user-list'; -import '/imports/ui/components/user/user'; -import '/imports/ui/components/messages-list/messages-list'; -import '/imports/ui/components/message/message'; -import '/imports/ui/components/dashboard/dashboard'; -import '/imports/ui/components/new-scanning/new-scanning'; -import '/imports/ui/components/user-settings/user-settings'; diff --git a/ui/imports/startup/client/template-helpers.js b/ui/imports/startup/client/template-helpers.js deleted file mode 100644 index 23eaf50..0000000 --- a/ui/imports/startup/client/template-helpers.js +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; -import * as utils from '/imports/lib/utilities'; -import { Counter } from 'meteor/natestrauser:publish-performant-counts'; - -Template.registerHelper('asHash', function (params) { - return params.hash; -}); - -Template.registerHelper('idToStr', utils.idToStr); - -Template.registerHelper('rPath', function (source, pathStr) { - let path = R.split('.', pathStr); - return R.path(path, source); -}); - -Template.registerHelper('asArray', function (val) { - return [val]; -}); - -Template.registerHelper('countOf', function (name) { - if (name) { - return Counter.get(name); - } -}); - - -Template.registerHelper('jsonAsString', function (val) { - let str = JSON.stringify(val, null, 4); - return str; -}); diff --git a/ui/imports/startup/server/config.js b/ui/imports/startup/server/config.js deleted file mode 100644 index ac7c9a2..0000000 --- a/ui/imports/startup/server/config.js +++ /dev/null @@ -1,9 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import './configs/accounts'; diff --git a/ui/imports/startup/server/configs/accounts.js b/ui/imports/startup/server/configs/accounts.js deleted file mode 100644 index f098233..0000000 --- a/ui/imports/startup/server/configs/accounts.js +++ /dev/null @@ -1,16 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -Accounts.validateNewUser((_user) => { - let loggedInUser = Meteor.user(); - if (Roles.userIsInRole(loggedInUser, 'manage-users', Roles.GLOBAL_GROUP)) { - return true; - } - - throw new Meteor.Error(403, 'NotAuthorized to create new users'); -}); diff --git a/ui/imports/startup/server/index.js b/ui/imports/startup/server/index.js deleted file mode 100644 index ee22e45..0000000 --- a/ui/imports/startup/server/index.js +++ /dev/null @@ -1,13 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -// This defines all the collections, publications and methods that the application provides -// as an API to the client. -import './register-api.js'; -import './seeds.js'; -import './config.js'; diff --git a/ui/imports/startup/server/register-api.js b/ui/imports/startup/server/register-api.js deleted file mode 100644 index f0be6ce..0000000 --- a/ui/imports/startup/server/register-api.js +++ /dev/null @@ -1,63 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import '../../api/constants/server/publications'; - -import '../../api/environments/server/publications.js'; -import '../../api/environments/methods.js'; - -import '../../api/inventories/server/publications.js'; -import '../../api/inventories/server/methods.js'; - -import '../../api/scans/server/publications.js'; -import '../../api/scans/methods.js'; -import '../../api/scans/server/methods.js'; - -import '../../api/scheduled-scans/server/publications.js'; -import '../../api/scheduled-scans/methods.js'; -import '../../api/scheduled-scans/server/methods.js'; - -import '../../api/messages/server/publications'; -import '../../api/messages/server/methods'; -import '../../api/messages/methods.js'; - -import '../../api/cliques/server/publications'; -import '../../api/cliques/methods.js'; - -import '../../api/links/server/publications'; -import '../../api/links/methods.js'; -import '../../api/links/server/methods'; - -import '../../api/statistics/server/publications'; -import '../../api/statistics/methods.js'; - -import '../../api/attributes_for_hover_on_data/server/publications'; -import '../../api/attributes_for_hover_on_data/methods.js'; - -import '../../api/link-types/server/publications'; -import '../../api/link-types/methods.js'; - -import '../../api/clique-types/server/publications'; -import '../../api/clique-types/methods.js'; - -import '../../api/clique-constraints/server/publications'; -import '../../api/clique-constraints/methods.js'; - -import '../../api/accounts/server/publications'; -import '../../api/accounts/methods'; - -import '../../api/supported_environments/server/publications'; -import '../../api/supported_environments/methods'; - -import '../../api/user-settings/server/publications'; -import '../../api/user-settings/methods'; - -import '../../api/connection-tests/server/publications'; -import '../../api/connection-tests/methods'; - -import '../../api/migrations/migrations'; diff --git a/ui/imports/startup/server/seeds.js b/ui/imports/startup/server/seeds.js deleted file mode 100644 index a6132bf..0000000 --- a/ui/imports/startup/server/seeds.js +++ /dev/null @@ -1,10 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -//import './seeds/constants'; //disabled as of US2758. -import './seeds/users'; diff --git a/ui/imports/startup/server/seeds/constants.js b/ui/imports/startup/server/seeds/constants.js deleted file mode 100644 index 2d59d99..0000000 --- a/ui/imports/startup/server/seeds/constants.js +++ /dev/null @@ -1,68 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import { Constants } from '/imports/api/constants/constants'; -import * as R from 'ramda'; -import { Distributions } from '/imports/api/constants/data/distributions'; -//import { NetworkPlugins } from './data/network-plugins'; -import { LogLevels } from '/imports/api/constants/data/log-levels'; -import { MechanismDrivers } from '/imports/api/constants/data/mechanism-drivers'; -import { ObjectTypesForLinks } from '/imports/api/constants/data/object-types-for-links'; -import { TypeDrivers } from '/imports/api/constants/data/type-drivers'; -import { EnvTypes } from '/imports/api/constants/data/env-types'; -import { Statuses as ScansStatuses } from '/imports/api/constants/data/scans-statuses'; -import { EnvironmentMonitoringTypes } from '/imports/api/constants/data/environment-monitoring-types'; -import { EnvProvisionTypes } from '/imports/api/constants/data/environment-provision-types'; -import { MessageSourceSystems } from '/imports/api/constants/data/message-source-systems'; - -let constantsDefaults = [{ - name: 'env_types', - values: EnvTypes -}, { - name: 'scans_statuses', - values: ScansStatuses -}, { - name: 'environment_monitoring_types', - values: EnvironmentMonitoringTypes -}, { - name: 'distributions', - values: Distributions -}, { - name: 'log_levels', - values: LogLevels -}, { - name: 'mechanism_drivers', - values: MechanismDrivers -}, { - name: 'object_types_for_links', - values: ObjectTypesForLinks -}, { - name: 'type_drivers', - values: TypeDrivers -}, { - name: 'environment_provision_types', - values: EnvProvisionTypes -}, { - name: 'message_source_systems', - values: MessageSourceSystems -}]; - -if (Meteor.server) { - R.forEach((def) => { - insertConstants(Constants, def.name, def.values); - }, constantsDefaults); -} - -function insertConstants(collection, name, values) { - if (collection.find({ name: name}).count() === 0) { - Constants.insert({ - name: name, - data: values - }); - } -} diff --git a/ui/imports/startup/server/seeds/users.js b/ui/imports/startup/server/seeds/users.js deleted file mode 100644 index 34c20c6..0000000 --- a/ui/imports/startup/server/seeds/users.js +++ /dev/null @@ -1,51 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import * as R from 'ramda'; -import { Roles } from 'meteor/alanning:roles'; - -let users = [ - { - username: 'admin', - name: 'admin', - email: 'admin@example.com', - password: '123456', - roles: [ - { role: 'manage-users', group: Roles.GLOBAL_GROUP }, - { role: 'manage-link-types', group: Roles.GLOBAL_GROUP }, - { role: 'manage-clique-types', group: Roles.GLOBAL_GROUP }, - { role: 'manage-clique-constraints', group: Roles.GLOBAL_GROUP }, - { role: 'view-env', group: Roles.GLOBAL_GROUP }, - { role: 'edit-env', group: Roles.GLOBAL_GROUP }, - ] - } -]; - -R.forEach((user) => { - let id; - let userDb = Meteor.users.findOne({ username: user.username }); - if (R.isNil(userDb)) { - console.log('creating user', user); - id = Accounts.createUser({ - username: user.username, - email: user.email, - password: user.password, - profile: { name: user.name } - }); - } else { - id = userDb._id; - } - - if (user.roles.length > 0) { - console.log('adding roles to user', user, user.roles); - - R.forEach((roleItem) => { - Roles.addUsersToRoles(id, roleItem.role, roleItem.group); - }, user.roles); - } -}, users); diff --git a/ui/imports/ui/actions/environment-panel.actions.js b/ui/imports/ui/actions/environment-panel.actions.js deleted file mode 100644 index ca8489c..0000000 --- a/ui/imports/ui/actions/environment-panel.actions.js +++ /dev/null @@ -1,217 +0,0 @@ -//import * as R from 'ramda'; - -export const SET_ENV_NAME = 'SET_ENV_NAME'; -export const UPDATE_ENV_TREE_NODE = 'UPDATE_ENV_TREE_NODE'; -export const ADD_UPDATE_CHILDREN_ENV_TREE_NODE = 'ADD_UPDATE_CHILDREN_ENV_TREE_NODE'; -export const RESET_ENV_TREE_NODE_CHILDREN = 'RESET_ENV_TREE_NODE_CHILDREN'; -export const START_OPEN_ENV_TREE_NODE = 'START_OPEN_ENV_TREE_NODE'; -export const END_OPEN_ENV_TREE_NODE = 'END_OPEN_ENV_TREE_NODE'; -export const START_CLOSE_ENV_TREE_NODE = 'START_CLOSE_ENV_TREE_NODE'; -export const END_CLOSE_ENV_TREE_NODE = 'END_CLOSE_ENV_TREE_NODE'; -export const SET_ENV_CHILD_DETECTED_TREE_NODE = 'SET_ENV_CHILD_DETECTED_TREE_NODE'; -export const SET_ENV_SELECTED_NODE = 'SET_ENV_SELECTED_NODE'; -export const SET_ENV_ENV_ID = 'SET_ENV_ENV_ID'; -export const SET_ENV_SELECTED_NODE_INFO = 'SET_ENV_SELECTED_NODE_INFO'; -export const SET_ENV_AS_LOADED = 'SET_ENV_AS_LOADED'; -export const SET_ENV_AS_NOT_LOADED = 'SET_ENV_AS_NOT_LOADED'; -export const SET_ENV_SELECTED_NODE_AS_ENV = 'SET_ENV_SELECTED_NODE_AS_ENV'; -export const SET_SHOW_DASHBOARD = 'SET_SHOW_DASHBOARD'; -export const SET_SHOW_GRAPH = 'SET_SHOW_GRAPH'; -export const TOGGLE_ENV_SHOW = 'TOGGLE_ENV_SHOW'; -export const SET_ENV_POSITION_REPORT_IS_NEEDED_AS_ON = 'SET_ENV_POSITION_REPORT_IS_NEEDED_AS_ON'; -export const REPORT_ENV_NODE_POSITION_RETRIEVED = 'REPORT_ENV_NODE_POSITION_RETRIEVED'; -export const SET_ENV_SCROLL_TO_NODE_IS_NEEDED_AS_ON = 'SET_ENV_SCROLL_TO_NODE_IS_NEEDED_AS_ON'; -export const REPORT_ENV_SCROLL_TO_NODE_PERFORMED = 'REPORT_ENV_SCROLL_TO_NODE_PERFORMED'; -export const RESET_ENV_NEED_CHILD_DETECTION = 'RESET_ENV_NEED_CHILD_DETECTION'; - -export function setEnvName(envName) { - return { - type: SET_ENV_NAME, - payload: { - envName: envName - } - }; -} - -export function updateEnvTreeNode(nodeInfo) { - return { - type: UPDATE_ENV_TREE_NODE, - payload: { - nodeInfo: nodeInfo - } - }; -} - -export function addUpdateChildrenEnvTreeNode(nodePath, childrenInfo) { - return { - type: ADD_UPDATE_CHILDREN_ENV_TREE_NODE, - payload: { - nodePath: nodePath, - childrenInfo: childrenInfo - }, - }; -} - -export function resetEnvTreeNodeChildren(nodePath) { - return { - type: RESET_ENV_TREE_NODE_CHILDREN, - payload: { - nodePath: nodePath, - } - }; -} - -export function startOpenEnvTreeNode(nodePath) { - return { - type: START_OPEN_ENV_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function endOpenEnvTreeNode(nodePath) { - return { - type: END_OPEN_ENV_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function startCloseEnvTreeNode(nodePath) { - return { - type: START_CLOSE_ENV_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function endCloseEnvTreeNode(nodePath) { - return { - type: END_CLOSE_ENV_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function setEnvChildDetectedTreeNode(nodePath) { - return { - type: SET_ENV_CHILD_DETECTED_TREE_NODE, - payload: { - nodePath: nodePath - } - }; -} - -export function setEnvSelectedNode(nodeId, nodeType) { - return { - type: SET_ENV_SELECTED_NODE, - payload: { - nodeId: nodeId, - nodeType: nodeType - } - }; -} - -export function setEnvSelectedNodeAsEnv() { - return { - type: SET_ENV_SELECTED_NODE_AS_ENV, - }; -} - -export function setEnvEnvId(_id) { - return { - type: SET_ENV_ENV_ID, - payload: { - _id: _id - } - }; -} - -export function setEnvSelectedNodeInfo(nodeInfo) { - return { - type: SET_ENV_SELECTED_NODE_INFO, - payload: { - nodeInfo: nodeInfo - } - }; -} - -export function setEnvAsLoaded() { - return { - type: SET_ENV_AS_LOADED, - }; -} - -export function setEnvAsNotLoaded() { - return { - type: SET_ENV_AS_NOT_LOADED - }; -} - -export function setShowDashboard() { - return { - type: SET_SHOW_DASHBOARD - }; -} - -export function setShowGraph() { - return { - type: SET_SHOW_GRAPH - }; -} - -export function toggleEnvShow() { - return { - type: TOGGLE_ENV_SHOW - }; -} - -export function setEnvPositionReportIsNeededAsOn(nodePath) { - return { - type: SET_ENV_POSITION_REPORT_IS_NEEDED_AS_ON, - payload: { - nodePath: nodePath - } - }; -} - -export function reportEnvNodePositionRetrieved(nodePath, rect) { - return { - type: REPORT_ENV_NODE_POSITION_RETRIEVED, - payload: { - nodePath: nodePath, - rect: rect - } - }; -} - -export function setEnvScrollToNodeIsNeededAsOn(nodePath) { - return { - type: SET_ENV_SCROLL_TO_NODE_IS_NEEDED_AS_ON, - payload: { - nodePath: nodePath - } - }; -} - -export function reportEnvScrollToNodePerformed(nodePath) { - return { - type: REPORT_ENV_SCROLL_TO_NODE_PERFORMED, - payload: { - nodePath: nodePath - } - }; -} - -export function resetEnvNeedChildDetection(nodePath) { - return { - type: RESET_ENV_NEED_CHILD_DETECTION, - payload: { - nodePath: nodePath - } - }; -} diff --git a/ui/imports/ui/actions/graph-tooltip-window.actions.js b/ui/imports/ui/actions/graph-tooltip-window.actions.js deleted file mode 100644 index 297cb7c..0000000 --- a/ui/imports/ui/actions/graph-tooltip-window.actions.js +++ /dev/null @@ -1,22 +0,0 @@ -//import * as R from 'ramda'; - -export const ACTIVATE_GRAPH_TOOLTIP_WINDOW = 'ACTIVATE_GRAPH_TOOLTIP_WINDOW'; -export const CLOSE_GRAPH_TOOLTIP_WINDOW = 'CLOSE_GRAPH_TOOLTIP_WINDOW'; - -export function activateGraphTooltipWindow(label, attributes, left, top) { - return { - type: ACTIVATE_GRAPH_TOOLTIP_WINDOW, - payload: { - label: label, - attributes: attributes, - left: left, - top: top - } - }; -} - -export function closeGraphTooltipWindow() { - return { - type: CLOSE_GRAPH_TOOLTIP_WINDOW - }; -} diff --git a/ui/imports/ui/actions/main-app.actions.js b/ui/imports/ui/actions/main-app.actions.js deleted file mode 100644 index 7d1a730..0000000 --- a/ui/imports/ui/actions/main-app.actions.js +++ /dev/null @@ -1,13 +0,0 @@ -//import * as R from 'ramda'; - -export const SET_MAIN_APP_SELECTED_ENVIRONMENT = 'SET_MAIN_APP_SELECTED_ENVIRONMENT'; - -export function setMainAppSelectedEnvironment(_id, name) { - return { - type: SET_MAIN_APP_SELECTED_ENVIRONMENT, - payload: { - _id: _id, - name: name - } - }; -} diff --git a/ui/imports/ui/actions/navigation.js b/ui/imports/ui/actions/navigation.js deleted file mode 100644 index f9c86b5..0000000 --- a/ui/imports/ui/actions/navigation.js +++ /dev/null @@ -1,76 +0,0 @@ -import * as R from 'ramda'; - -const SET_CURRENT_NODE = 'SET_CURRENT_NODE'; -const SET_CURRENT_NODE_FROM_TREE_CONTROL = 'SET_CURRENT_NODE_FROM_TREE_CONTROL'; - -function setCurrentNode(item) { - let nodeChain = convertToNodeChain(item.id_path, item.name_path); - R.last(nodeChain).item = item; - - return { - type: SET_CURRENT_NODE, - payload: { - nodeChain: nodeChain - } - }; -} - -function setCurrentNodeFromTreeControl (item) { - let nodeChain = convertToNodeChain(item.id_path, item.name_path); - R.last(nodeChain).item = item; - - return { - type: SET_CURRENT_NODE_FROM_TREE_CONTROL, - payload: { - nodeChain: nodeChain - } - }; -} - -function convertToNodeChain(idPath, namePath) { - let convert = R.pipe(R.split(), R.slice(1, Infinity)); - let paths = convert('/', idPath); - let names = convert('/', namePath); - let nodesData = R.zip(paths, names); - let nodeChain = R.map((nodeData) => { - return { - id: nodeData[0], - name: nodeData[1] - }; - }, nodesData); - - let parent = null; - - for (let i = 0; i < nodeChain.length; i++) { - let node = nodeChain[i]; - node.parent = parent; - node.fullIdPath = calcFullIdPath(node); - node.fullNamePath = calcFullNamePath(node); - parent = node; - } - - return nodeChain; -} - -function calcFullIdPath (node) { - if (R.isNil(node)) { return null; } - if (R.isNil(node.parent)) { return '/' + node.id; } - - let parentFullPath = calcFullIdPath(node.parent); - return parentFullPath + '/' + node.id; -} - -function calcFullNamePath (node) { - if (R.isNil(node)) { return null; } - if (R.isNil(node.parent)) { return '/' + node.name; } - - let parentFullPath = calcFullNamePath(node.parent); - return parentFullPath + '/' + node.name; -} - -export { - SET_CURRENT_NODE, - SET_CURRENT_NODE_FROM_TREE_CONTROL, - setCurrentNode, - setCurrentNodeFromTreeControl -}; diff --git a/ui/imports/ui/actions/search-interested-parties.js b/ui/imports/ui/actions/search-interested-parties.js deleted file mode 100644 index 98b413b..0000000 --- a/ui/imports/ui/actions/search-interested-parties.js +++ /dev/null @@ -1,85 +0,0 @@ -//import * as R from 'ramda'; - -const ADD_SEARCH_INTERESTED_PARTY = 'ADD_SEARCH_INTERESTED_PARTY'; -const REMOVE_SEARCH_INTERESTED_PARTY = 'REMOVE_SEARCH_INTERESTED_PARTY'; -const SET_SEARCH_TERM = 'SET_SEARCH_TERM'; -const SET_SEARCH_AUTO_COMPLETE_TERM = 'SET_SEARCH_AUTO_COMPLETE_TERM'; -const RESET_SEARCH_AUTO_COMPLETE_FUTURE = 'RESET_SEARCH_AUTO_COMPLETE_FUTURE'; -const SET_SEARCH_AUTO_COMPLETE_FUTURE = 'SET_SEARCH_AUTO_COMPLETE_FUTURE'; - -const AUTO_COMPLETE_DELAY = 300; // miliseconds. - -function addSearchInterestedParty(listener) { - return { - type: ADD_SEARCH_INTERESTED_PARTY, - payload: { - listener: listener - } - }; -} - -function removeSearchInterestedParty(listener) { - return { - type: REMOVE_SEARCH_INTERESTED_PARTY, - payload: { - listener: listener - } - }; -} - -function setSearchTerm(searchTerm) { - return { - type: SET_SEARCH_TERM, - payload: { - searchTerm: searchTerm - } - }; -} - -function setSearchAutoCompleteTerm(searchTerm) { - return { - type: SET_SEARCH_AUTO_COMPLETE_TERM, - payload: { - searchTerm: searchTerm - } - }; -} - -function resetSearchAutoCompleteFuture() { - return { - type: RESET_SEARCH_AUTO_COMPLETE_FUTURE, - }; -} - -function setSearchAutoCompleteFuture(futureId) { - return { - type: SET_SEARCH_AUTO_COMPLETE_FUTURE, - payload: { - futureId: futureId - } - }; -} - -function notifySearchAutoCompleteTermChanged(searchTerm) { - return (dispatch) => { - let autoCompleteFutureId = setTimeout(() => { - dispatch(resetSearchAutoCompleteFuture()); - dispatch(setSearchAutoCompleteTerm(searchTerm)); - }, AUTO_COMPLETE_DELAY); - dispatch(setSearchAutoCompleteFuture(autoCompleteFutureId)); - }; -} - -export { - ADD_SEARCH_INTERESTED_PARTY, - REMOVE_SEARCH_INTERESTED_PARTY, - SET_SEARCH_TERM, - SET_SEARCH_AUTO_COMPLETE_TERM, - RESET_SEARCH_AUTO_COMPLETE_FUTURE, - SET_SEARCH_AUTO_COMPLETE_FUTURE, - addSearchInterestedParty, - removeSearchInterestedParty, - setSearchTerm, - setSearchAutoCompleteTerm, - notifySearchAutoCompleteTermChanged -}; diff --git a/ui/imports/ui/actions/tree-node.actions.js b/ui/imports/ui/actions/tree-node.actions.js deleted file mode 100644 index f463321..0000000 --- a/ui/imports/ui/actions/tree-node.actions.js +++ /dev/null @@ -1,136 +0,0 @@ -//import * as R from 'ramda'; - -export const UPDATE_TREE_NODE_INFO = 'UPDATE_TREE_NODE_INFO'; -export const ADD_UPDATE_CHILDREN_TREE_NODE = 'ADD_UPDATE_CHILDREN_TREE_NODE'; -export const RESET_TREE_NODE_CHILDREN = 'RESET_TREE_NODE_CHILDREN'; -export const START_OPEN_TREE_NODE = 'START_OPEN_TREE_NODE'; -export const END_OPEN_TREE_NODE = 'END_OPEN_TREE_NODE'; -export const START_CLOSE_TREE_NODE = 'START_CLOSE_TREE_NODE'; -export const END_CLOSE_TREE_NODE = 'END_CLOSE_TREE_NODE'; -export const SET_CHILD_DETECTED_TREE_NODE = 'SET_CHILD_DETECTED_TREE_NODE'; -export const SET_POSITION_REPORT_IS_NEEDED_AS_ON = 'SET_POSITION_REPORT_IS_NEEDED_AS_ON'; -export const REPORT_NODE_POSITION_RETRIEVED = 'REPORT_NODE_POSITION_RETRIEVED'; -export const SET_SCROLL_TO_NODE_IS_NEEDED_AS_ON = 'SET_SCROLL_TO_NODE_IS_NEEDED_AS_ON'; -export const REPORT_SCROLL_TO_NODE_PERFORMED = 'REPORT_SCROLL_TO_NODE_PERFORMED'; -export const RESET_NEED_CHILD_DETECTION = 'RESET_NEED_CHILD_DETECTION'; - -export function updateTreeNodeInfo(nodeInfo, level) { - return { - type: UPDATE_TREE_NODE_INFO, - payload: { - nodeInfo: nodeInfo, - level: level - } - }; -} - -export function addUpdateChildrenTreeNode(nodePath, childrenInfo, level) { - return { - type: ADD_UPDATE_CHILDREN_TREE_NODE, - payload: { - nodePath: nodePath, - childrenInfo: childrenInfo, - level: level - }, - }; -} - -export function resetTreeNodeChildren(nodePath) { - return { - type: RESET_TREE_NODE_CHILDREN, - payload: { - nodePath: nodePath, - } - }; -} - -export function startOpenTreeNode(nodePath) { - return { - type: START_OPEN_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function endOpenTreeNode(nodePath) { - return { - type: END_OPEN_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function startCloseTreeNode(nodePath) { - return { - type: START_CLOSE_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function endCloseTreeNode(nodePath) { - return { - type: END_CLOSE_TREE_NODE, - payload: { - nodePath: nodePath, - } - }; -} - -export function setChildDetectedTreeNode(nodePath) { - return { - type: SET_CHILD_DETECTED_TREE_NODE, - payload: { - nodePath: nodePath - } - }; -} - -export function setPositionReportIsNeededAsOn(nodePath) { - return { - type: SET_POSITION_REPORT_IS_NEEDED_AS_ON, - payload: { - nodePath: nodePath - } - }; -} - -export function reportNodePositionRetrieved(nodePath, rect) { - return { - type: REPORT_NODE_POSITION_RETRIEVED, - payload: { - nodePath: nodePath, - rect: rect - } - }; -} - -export function setScrollToNodeIsNeededAsOn(nodePath) { - return { - type: SET_SCROLL_TO_NODE_IS_NEEDED_AS_ON, - payload: { - nodePath: nodePath - } - }; -} - -export function reportScrollToNodePerformed(nodePath) { - return { - type: REPORT_SCROLL_TO_NODE_PERFORMED, - payload: { - nodePath: nodePath - } - }; -} - -export function resetNeedChildDetection(nodePath) { - return { - type: RESET_NEED_CHILD_DETECTION, - payload: { - nodePath: nodePath - } - }; -} diff --git a/ui/imports/ui/actions/vedge-info-window.actions.js b/ui/imports/ui/actions/vedge-info-window.actions.js deleted file mode 100644 index 2ff3031..0000000 --- a/ui/imports/ui/actions/vedge-info-window.actions.js +++ /dev/null @@ -1,33 +0,0 @@ -//import * as R from 'ramda'; - -export const ACTIVATE_VEDGE_INFO_WINDOW = 'ACTIVATE_VEDGE_INFO_WINDOW'; -export const CLOSE_VEDGE_INFO_WINDOW = 'CLOSE_VEDGE_INFO_WINDOW'; - -export function activateVedgeInfoWindow(node, left, top) { - // todo: remove. this is for debug - /* - node = { - _id: '0', - id: 'devstack-vpp1-VPP', - id_path: '', - name: 'devstack-vpp1-VPP', - name_path: '', - environment: 'Devstack-VPP' - }; - */ - - return { - type: ACTIVATE_VEDGE_INFO_WINDOW, - payload: { - node: node, - left: left, - top: top - } - }; -} - -export function closeVedgeInfoWindow() { - return { - type: CLOSE_VEDGE_INFO_WINDOW - }; -} diff --git a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.html b/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.html deleted file mode 100644 index 9a75637..0000000 --- a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.html +++ /dev/null @@ -1,53 +0,0 @@ - - diff --git a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.js b/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.js deleted file mode 100644 index ba35c73..0000000 --- a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.js +++ /dev/null @@ -1,161 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - Template Component: accordionNavMenu - */ - -/* eslint indent: "off" */ - -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -//import { Tracker } from 'meteor/tracker'; -//import { Session } from 'meteor/session'; -//import { InventoryTreeNodeBehavior } from '/imports/ui/lib/inventory-tree-node-behavior'; -import { EnvironmentTreeNodeBehavior } from '/imports/ui/lib/environment-tree-node-behavior'; -//import { Inventory } from '/imports/api/inventories/inventories'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -import '/imports/ui/components/tree-node/tree-node'; -import '/imports/ui/components/accordionTreeNode/accordionTreeNode'; -import '/imports/ui/components/d3graph/d3graph'; - -import { store } from '/imports/ui/store/store'; -import { - resetEnvTreeNodeChildren, - addUpdateEnvTreeNode, - addUpdateChildrenEnvTreeNode, - startOpenEnvTreeNode, - startCloseEnvTreeNode, - endCloseEnvTreeNode, - setEnvChildDetectedTreeNode, -} from '/imports/ui/actions/environment-panel.actions'; - -import './accordion-nav-menu.html'; - -Template.accordionNavMenu.onCreated(function () { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault ({}); - - createAttachedFns(instance); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - envName: { type: String }, - mainNode: { type: Object, blackbox: true }, - onOpeningDone: { type: Function }, - onNodeSelected: { type: Function }, - onToggleGraphReq: { type: Function }, - onResetSelectedNodeReq: { type: Function }, - onPositionRetrieved: { type: Function }, - onScrollToNodePerformed: { type: Function }, - onOpenLinkReq: { type: Function }, - onResetNeedChildDetection: { type: Function }, - onToggleMenu: { type: Function }, - showCollapsed: { type: Boolean }, - }).validate(data); - }); - -}); - - -Template.accordionNavMenu.rendered = function () { -}; - -Template.accordionNavMenu.onDestroyed(function () { -}); - -/* - * Events - */ - -Template.accordionNavMenu.events({ - 'click .sm-btn-dashboard': function (_event, _instance) { - let data = Template.currentData(); - data.onResetSelectedNodeReq(); - }, - - 'click .sm-toggle-graph-button': function (_event, _instance) { - let data = Template.currentData(); - data.onToggleGraphReq(); - }, - - 'click .sm-menu-toggle-btn': function (_event, instance) { - instance.data.onToggleMenu(); - } -}); - -/* - * Helpers - */ - -Template.accordionNavMenu.helpers({ - argsTreeNode: function (node) { - let instance = Template.instance(); - let data = Template.currentData(); - - return { - behavior: EnvironmentTreeNodeBehavior, - showDetailsLine: false, - openState: node.openState, - node: node.nodeInfo, - children: node.children, - childDetected: node.childDetected, - needChildDetection: node.needChildDetection, - linkDetected: node.linkDetected, - level: node.level, - positionNeeded: node.positionNeeded, - scrollToNodeIsNeeded: node.scrollToNodeIsNeeded, - onResetChildren: instance._fns.onResetChildren, - onChildRead: instance._fns.onChildRead, - onChildrenRead: instance._fns.onChildrenRead, - onStartOpenReq: instance._fns.onStartOpenReq, - onStartCloseReq: instance._fns.onStartCloseReq, - onClosingDone: instance._fns.onClosingDone, - onChildDetected: instance._fns.onChildDetected, - onOpeningDone: data.onOpeningDone, - onNodeSelected: data.onNodeSelected, - onPositionRetrieved: data.onPositionRetrieved, - onScrollToNodePerformed: data.onScrollToNodePerformed, - onOpenLinkReq: data.onOpenLinkReq, - onResetNeedChildDetection: data.onResetNeedChildDetection, - }; - } -}); // end: helpers - -function createAttachedFns(instance) { - - instance._fns = { - onResetChildren: function (nodePath) { - store.dispatch(resetEnvTreeNodeChildren(R.tail(nodePath))); - }, - onChildRead: function (nodePath, childNode) { - store.dispatch(addUpdateEnvTreeNode(R.tail(nodePath), childNode)); - }, - onChildrenRead: function (nodePath, childrenInfo) { - store.dispatch(addUpdateChildrenEnvTreeNode(R.tail(nodePath), childrenInfo)); - }, - onStartOpenReq: (nodePath) => { - store.dispatch(startOpenEnvTreeNode(R.tail(nodePath))); - }, - onStartCloseReq: (nodePath) => { - store.dispatch(startCloseEnvTreeNode(R.tail(nodePath))); - }, - onClosingDone: (nodePath) => { - store.dispatch(endCloseEnvTreeNode(R.tail(nodePath))); - }, - onChildDetected: (nodePath) => { - store.dispatch(setEnvChildDetectedTreeNode(R.tail(nodePath))); - }, - }; -} diff --git a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.styl b/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.styl deleted file mode 100644 index 8e47e23..0000000 --- a/ui/imports/ui/components/accordion-nav-menu/accordion-nav-menu.styl +++ /dev/null @@ -1,19 +0,0 @@ -.os-accordion-nav-menu - .sm-btn-dashboard - cursor: pointer; - - .sm-inventory-tree - float: left; - width: 100%; - - display: flex; - flex-flow: column; - align-items: stretch; - - .sm-collapsed-menu - padding-top: 10px; - padding-left: 3px; - - a - color: white; - cursor: pointer; diff --git a/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.html b/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.html deleted file mode 100644 index 921c8cd..0000000 --- a/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.html +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.js b/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.js deleted file mode 100644 index 68f38d1..0000000 --- a/ui/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu.js +++ /dev/null @@ -1,147 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: accordionWikiMenu - */ - -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -//import { store } from '/imports/ui/store/store'; -//import { setCurrentNode } from '/imports/ui/actions/navigation'; - -import './accordion-wiki-menu.html'; - -Template.accordionWikiMenu.rendered = function () { - - // init wow lib - new WOW().init(); - - // smooth scrolling function - $(function() { - $('a[href*="#"]:not([href="#"])').click(function() { - if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { - var target = $(this.hash); - target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); - if (target.length) { - $('html, body').animate({ - scrollTop: target.offset().top - 90 - }, 1000); - return false; - } - } - }); - }); - - /* accordion menu plugin*/ - (function($, window, _document, _undefined) { - var pluginName = 'accordion'; - var defaults = { - speed: 200, - showDelay: 0, - hideDelay: 0, - singleOpen: true, - clickEffect: true, - indicator: 'submenu-indicator-minus', - subMenu: 'submenu', - event: 'click touchstart' // click, touchstart - }; - - function Plugin(element, options) { - this.element = element; - this.settings = $.extend({}, defaults, options); - this._defaults = defaults; - this._name = pluginName; - this.init(); - } - $.extend(Plugin.prototype, { - init: function() { - this.openSubmenu(); - this.submenuIndicators(); - if (defaults.clickEffect) { - this.addClickEffect(); - } - }, - openSubmenu: function() { - $(this.element).children('ul').find('li').bind(defaults.event, function(e) { - e.stopPropagation(); - e.preventDefault(); - var $subMenus = $(this).children('.' + defaults.subMenu); - var $allSubMenus = $(this).find('.' + defaults.subMenu); - if ($subMenus.length > 0) { - if ($subMenus.css('display') == 'none') { - $subMenus.slideDown(defaults.speed).siblings('a').addClass(defaults.indicator); - if (defaults.singleOpen) { - $(this).siblings().find('.' + defaults.subMenu).slideUp(defaults.speed) - .end().find('a').removeClass(defaults.indicator); - } - return false; - } else { - $(this).find('.' + defaults.subMenu).delay(defaults.hideDelay).slideUp(defaults.speed); - } - if ($allSubMenus.siblings('a').hasClass(defaults.indicator)) { - $allSubMenus.siblings('a').removeClass(defaults.indicator); - } - } - window.location.href = $(this).children('a').attr('href'); - }); - }, - submenuIndicators: function() { - if ($(this.element).find('.' + defaults.subMenu).length > 0) { - $(this.element).find('.' + defaults.subMenu).siblings('a').append('+'); - } - }, - addClickEffect: function() { - var ink, d, x, y; - $(this.element).find('a').bind('click touchstart', function(e) { - $('.ink').remove(); - if ($(this).children('.ink').length === 0) { - $(this).prepend(''); - } - ink = $(this).find('.ink'); - ink.removeClass('animate-ink'); - if (!ink.height() && !ink.width()) { - d = Math.max($(this).outerWidth(), $(this).outerHeight()); - ink.css({ - height: d, - width: d - }); - } - x = e.pageX - $(this).offset().left - ink.width() / 2; - y = e.pageY - $(this).offset().top - ink.height() / 2; - ink.css({ - top: y + 'px', - left: x + 'px' - }).addClass('animate-ink'); - }); - } - }); - $.fn[pluginName] = function(options) { - this.each(function() { - if (!$.data(this, 'plugin_' + pluginName)) { - $.data(this, 'plugin_' + pluginName, new Plugin(this, options)); - } - }); - return this; - }; - })(jQuery, window, document); - - jQuery(document).ready(function($) { - $('#left-nav-menu').accordion(); - $('.colors a').click(function() { - if ($(this).attr('class') != 'default') { - $('#left-nav-menu').removeClass(); - $('#left-nav-menu').addClass('menu').addClass($(this).attr('class')); - } else { - $('#left-nav-menu').removeClass(); - $('#left-nav-menu').addClass('menu'); - } - }); - }); -}; diff --git a/ui/imports/ui/components/accordionTreeNode/accordion-tree-node.styl b/ui/imports/ui/components/accordionTreeNode/accordion-tree-node.styl deleted file mode 100644 index b41d1f9..0000000 --- a/ui/imports/ui/components/accordionTreeNode/accordion-tree-node.styl +++ /dev/null @@ -1,5 +0,0 @@ -.os-accordion-tree-node - .js-item-link - display: flex; - justify-content: space-between; - diff --git a/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.html b/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.html deleted file mode 100644 index cb1b10e..0000000 --- a/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.html +++ /dev/null @@ -1,54 +0,0 @@ - - diff --git a/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.js b/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.js deleted file mode 100644 index 837c6a1..0000000 --- a/ui/imports/ui/components/accordionTreeNode/accordionTreeNode.js +++ /dev/null @@ -1,284 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: accordionTreeNode - */ - -/* eslint no-undef: off */ - -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; - -import { Inventory } from '/imports/api/inventories/inventories'; -//import { store } from '/client/imports/store'; -//import { setCurrentNode } from '/client/imports/actions/navigation'; - -//import { d3Graph } from '/imports/lib/d3-graph'; - -import '/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren'; -import './accordionTreeNode.html'; - -var subMenuClass = 'submenu'; -var switchingSpeed = 200; - -Template.accordionTreeNode.onCreated(function () { - var instance = this; - this.state = new ReactiveDict(); - this.state.setDefault({ - openState: 'close', - needChildrenClosing: false, - openedChildId: null, - showNow: false, - startAsClickedState: 'not_done', - data: null, - }); - - instance.autorun(function () { - //var tempData = instance.state.get('data'); - - let data = Template.currentData(); - let node = data.node; - instance.subscribe('inventory.first-child', - node.id, node.type, node.name, node.environment); - }); - -}); - -Template.accordionTreeNode.rendered = function () { - var instance = this; - - setTimeout(function () { - instance.state.set('showNow', true); - }, 50); - - instance.autorun(function () { - var openState = instance.state.get('openState'); - switch (openState) { - case 'opening': - // Blaze arcitecture bug: in render the children are not it rendered. - // There for we need to wait until children are rendered to do the animation. - instance.state.set('openState', 'open'); - activateNodeAction(instance); - setTimeout(function () { - animateOpening(instance.$(instance.firstNode)); - }, 65); - break; - - case 'closing': - - animateClosing(instance.$(instance.firstNode)); - setTimeout(function () { - instance.state.set('openState', 'close'); - //instance.data.onClose(instance.data.node.id); - }, 200); - break; - - case 'none': - break; - - default: - break; - } - }); - -}; - -Template.accordionTreeNode.helpers({ - reactOnShowOpen: function (showOpen) { - let instance = Template.instance(); - let openState = instance.state.get('openState'); - let nextOpenState = null; - - if (showOpen === false) { - if (openState === 'open' || - openState === 'opening') { - nextOpenState = 'closing'; - } - } else if (showOpen === true) { - if (openState === 'close' || - openState === 'closing') { - nextOpenState = 'opening'; - } - } - - if (nextOpenState) { - setTimeout(function () { - instance.state.set('openState', nextOpenState); - }, 10); - } - }, - - reactOnNewData: function (node) { - let instance = Template.instance(); - instance.state.set('data', { node: node }); - }, - - isNot: function (condition) { - return ! condition; - }, - - isNotClose: function () { - var instance = Template.instance(); - var openState = instance.state.get('openState'); - return (openState !== 'close'); - }, - - hasClique: function(){ - var controller = Iron.controller(); - var envName = controller.state.get('envName'); - - if(Inventory.find({ - parent_id: this.node.id, - parent_type: this.node.type, - environment: envName, - clique:true, - show_in_tree:true - }).count() > 0){ - - return 'true'; - } - else{ - return 'false'; - } - - }, - - hasChildren: function(){ - return hasChildren(this); - }, - - isOpen: function () { - var instance = Template.instance(); - return instance.state.get('openState') === 'open'; - }, - - isOpenOrOpening: function () { - var instance = Template.instance(); - var openState = instance.state.get('openState'); - return (openState === 'open' || openState === 'opening'); - }, - - createChildrenArgs: function( - parentNode, - selectedNode - ) { - - let instance = Template.instance(); - return { - node: parentNode, - selectedNode: selectedNode, - onClick(childNode) { - instance.data.onClick(childNode); - }, - }; - }, - - isNeedChildrenClosing: function () { - var instance = Template.instance(); - return instance.state.get('needChildrenClosing'); - }, - - closeWhenNeeded: function() { - var instance = Template.instance(); - var openState = instance.state.get('openState'); - - if (! singleOpenOption) { return; } - if (! instance.data.openedFamilyId) { return; } - if (openState !== 'open') { return; } - if (instance.data.node.id === instance.data.openedFamilyId) { return; } - - instance.state.set('openState', 'closing'); - }, - - showNow: function () { - var instance = Template.instance(); - return instance.state.get('showNow'); - }, -}); - -Template.accordionTreeNode.events({ - 'click': function(event, instance){ - event.stopPropagation(); - event.preventDefault(); - - instance.data.onClick(instance.data.node); - - /* - * todo : remove code - store.dispatch(setCurrentNode( - instance.data.node.id_path, - instance.data.node.name_path)); - - var openState = instance.state.get('openState'); - var nextState = openState; - - if (hasChildren(instance.data)) { - switch (openState) { - case 'open': - nextState = 'closing'; - break; - - case 'opening': - break; - - case 'close': - nextState = 'opening'; - break; - - case 'closing': - break; - } - - instance.state.set('openState', nextState); - - } - - - */ - }, -}); - -function activateNodeAction (_instance) { - -} - -function hasChildren(instance) { - var counterName = 'inventory.first-child!counter!id=' + instance.node.id; - return Counts.get(counterName) > 0; - - /* - var controller = Iron.controller(); - var envName = controller.state.get('envName'); - - return hasChildrenQuery(instance.node, envName); - */ -} - -/* -function hasChildrenQuery(node, envName) { - return Inventory.find({ - parent_id: node.id, - parent_type: node.type, - environment: envName, - show_in_tree: true - }, { - limit: 1 - }).count() > 0; -} -*/ - -function animateOpening($element) { - $subMenu = $element.children('.' + subMenuClass); - $subMenu.slideDown(switchingSpeed); -} - -function animateClosing($element) { - $subMenu = $element.children('.' + subMenuClass); - $subMenu.slideUp(switchingSpeed); -} diff --git a/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.html b/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.html deleted file mode 100644 index 786ecb1..0000000 --- a/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.html +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.js b/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.js deleted file mode 100644 index a74059c..0000000 --- a/ui/imports/ui/components/accordionTreeNodeChildren/accordionTreeNodeChildren.js +++ /dev/null @@ -1,125 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: accordionTreeNodeChildren - */ - -/* eslint no-undef: off */ - -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Inventory } from '/imports/api/inventories/inventories'; - -import './accordionTreeNodeChildren.html'; - -Template.accordionTreeNodeChildren.onCreated(function () { - var instance = this; - this.state = new ReactiveDict(); - this.state.setDefault({ - data: null, - siblingId: null - }); - - instance.autorun(function () { - let data = Template.currentData(); - let node = data.node; - instance.subscribe('inventory.children', - node.id, node.type, node.name, node.environment); - - if (R.equals('host_ref', node.type)) { - instance.subscribe('inventory?name&env&type', - node.name, node.environment, 'host'); - - Inventory.find({ - name: node.name, - environment: node.environment, - type: 'host' - }).forEach((sibling) => { - instance.state.set('siblingId', sibling.id); - }); - } - }); - -}); - -Template.accordionTreeNodeChildren.helpers({ - reactOnNewData: function (node) { - let instance = Template.instance(); - instance.state.set('data', { node: node }); - }, - - children: function () { - let instance = Template.instance(); - let siblingId = instance.state.get('siblingId'); - - return getChildrenQuery(instance.data.node, siblingId); - }, - - createTreeNodeArgs: function( - node, - selectedNode - ) { - - var instance = Template.instance(); - - let firstChild = null; - let restOfChildren = null; - let showOpen = false; - - if ((! R.isNil(selectedNode)) && - selectedNode.length > 0 - ) { - firstChild = selectedNode[0]; - restOfChildren = selectedNode.length > 1 ? - R.slice(1, Infinity, selectedNode) : null; - showOpen = firstChild.id === node.id ? true : false; - } - - return { - node: node, - showOpen: showOpen, - selectedNode: restOfChildren, - onClick: instance.data.onClick - }; - }, - - -}); - -Template.accordionTreeNodeChildren.events({ -}); - -function getChildrenQuery(node, siblingId) { - let query = - { - $or: [ - { - parent_id: node.id, - parent_type: node.type, - environment: node.environment, - show_in_tree: true - } - ] - }; - - - if (R.equals('host_ref', node.type)) { - query = R.merge(query, { - $or: R.append({ - parent_id: siblingId, - show_in_tree: true - }, query.$or) - }); - } - - console.log('getChildrenQuery', R.toString(query)); - - return Inventory.find(query); -} diff --git a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.html b/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.html deleted file mode 100644 index b1769ca..0000000 --- a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.html +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.js b/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.js deleted file mode 100644 index 5e7278d..0000000 --- a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.js +++ /dev/null @@ -1,212 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: AggregateDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { regexEscape } from '/imports/lib/regex-utils'; -import * as R from 'ramda'; -import { store } from '/imports/ui/store/store'; -import { Icon } from '/imports/lib/icon'; - -//import '/imports/ui/components/accordionNavMenu/accordionNavMenu'; -import '/imports/ui/components/data-cubic/data-cubic'; -import '/imports/ui/components/list-info-box/list-info-box'; - -import './aggregate-dashboard.html'; - -let infoBoxes = [{ - header: ['components', 'aggregateDashboard', 'infoBoxes', 'instances', 'header'], - dataSource: 'instancesCount', - icon: { type: 'fa', name: 'desktop' }, - theme: 'dark' -}, { - header: ['components', 'aggregateDashboard', 'infoBoxes', 'vServices', 'header'], - dataSource: 'vServicesCount', - icon: { type: 'fa', name: 'object-group' }, - theme: 'dark' -}, { - header: ['components', 'aggregateDashboard', 'infoBoxes', 'hosts', 'header'], - dataSource: 'hostsCount', - icon: { type: 'fa', name: 'server' }, - theme: 'dark' -}, { - header: ['components', 'aggregateDashboard', 'infoBoxes', 'vConnectors', 'header'], - dataSource: 'vConnectorsCount', - icon: { type: 'fa', name: 'compress' }, - theme: 'dark' -}, { - header: ['components', 'aggregateDashboard', 'infoBoxes', 'vEdges', 'header'], - dataSource: 'vEdgesCount', - icon: { type: 'fa', name: 'external-link' }, - theme: 'dark' -}]; - -let listInfoBoxes = [{ - header: ['components', 'aggregateDashboard', 'listInfoBoxes', 'hosts', 'header'], - listName: 'hosts', - listItemFormat: { label: 'name', value: 'id_path' }, - icon: { type: 'material', name: 'developer_board' }, -}]; - -/* - * Lifecycles - */ - -Template.AggregateDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - id_path: null, - instancesCount: 0, - vServicesCount: 0, - hostsCount: 0, - vConnectors: 0, - vEdges: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - Inventory.find({ _id: _id }).forEach((aggr) => { - instance.state.set('id_path', aggr.id_path); - - instance.subscribe('inventory?id_path', aggr.id_path); - instance.subscribe('inventory?id_path_start&type', aggr.id_path, 'instance'); - instance.subscribe('inventory?id_path_start&type', aggr.id_path, 'vservice'); - instance.subscribe('inventory?id_path_start&type', aggr.id_path, 'host'); - instance.subscribe('inventory?id_path_start&type', aggr.id_path, 'vconnector'); - instance.subscribe('inventory?id_path_start&type', aggr.id_path, 'vedge'); - - let idPathExp = new RegExp(`^${regexEscape(aggr.id_path)}`); - - instance.state.set('instancesCount', Inventory.find({ - id_path: idPathExp, - type: 'instance' - }).count()); - - instance.state.set('vServicesCount', Inventory.find({ - id_path: idPathExp, - type: 'vservice' - }).count()); - - instance.state.set('hostsCount', Inventory.find({ - id_path: idPathExp, - type: 'host' - }).count()); - - instance.state.set('vConnectorsCount', Inventory.find({ - id_path: idPathExp, - type: 'vconnector' - }).count()); - - instance.state.set('vEdgesCount', Inventory.find({ - id_path: idPathExp, - type: 'vedge' - }).count()); - }); - }); -}); - -/* -Template.AggregateDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.AggregateDashboard.events({ -}); - -/* - * Helpers - */ - -Template.AggregateDashboard.helpers({ - aggregate: function () { - let instance = Template.instance(); - let aggregate_id_path = instance.state.get('id_path'); - - return Inventory.findOne({ id_path: aggregate_id_path }); - }, - - infoBoxes: function () { - return infoBoxes; - }, - - listInfoBoxes: function () { - return listInfoBoxes; - }, - - argsInfoBox: function (infoBox) { - let instance = Template.instance(); - - return { - header: R.path(infoBox.header, store.getState().api.i18n), - dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(infoBox.icon), - theme: infoBox.theme - }; - }, - - argsListInfoBox: function (listInfoBox) { - let instance = Template.instance(); - let data = Template.currentData(); - let aggregate_id_path = instance.state.get('id_path'); - - return { - header: R.path(listInfoBox.header, store.getState().api.i18n), - list: getList(listInfoBox.listName, aggregate_id_path), - //dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(listInfoBox.icon), - //theme: infoBox.theme - listItemFormat: listInfoBox.listItemFormat, - onItemSelected: function (itemKey) { - data.onNodeSelected(new Mongo.ObjectID(itemKey)); - } - }; - } -}); - - -function getList(listName, parentIdPath) { - let idPathExp = new RegExp(`^${regexEscape(parentIdPath)}`); - - switch (listName) { - case 'hosts': - return Inventory.find({ - id_path: idPathExp, - type: 'host' - }); - - default: - throw 'unknowned list type'; - } -} diff --git a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.styl b/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.styl deleted file mode 100644 index 9764778..0000000 --- a/ui/imports/ui/components/aggregate-dashboard/aggregate-dashboard.styl +++ /dev/null @@ -1,10 +0,0 @@ -.os-aggregate-dashboard - .sm-info-boxes - display: flex - flex-flow: row wrap; - justify-content: space-around - - .sm-list-info-boxes - display: flex; - flex-flow: row wrap - justify-content: space-around diff --git a/ui/imports/ui/components/alarm-icons/alarm-icons.html b/ui/imports/ui/components/alarm-icons/alarm-icons.html deleted file mode 100644 index b20ccac..0000000 --- a/ui/imports/ui/components/alarm-icons/alarm-icons.html +++ /dev/null @@ -1,85 +0,0 @@ - - diff --git a/ui/imports/ui/components/alarm-icons/alarm-icons.js b/ui/imports/ui/components/alarm-icons/alarm-icons.js deleted file mode 100644 index e379007..0000000 --- a/ui/imports/ui/components/alarm-icons/alarm-icons.js +++ /dev/null @@ -1,78 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: alarmIcons - */ - -import '/imports/ui/components/breadcrumb/breadcrumb'; -import { Messages } from '/imports/api/messages/messages'; -import { Roles } from 'meteor/alanning:roles'; -import { ReactiveDict } from 'meteor/reactive-dict'; - -import { UserSettings } from '/imports/api/user-settings/user-settings'; - -import './alarm-icons.html'; - -/* - * Lifecycle - */ - -Template.alarmIcons.onCreated(function () { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - msgsViewBackDelta: 1 - }); - - instance.autorun(function () { - instance.subscribe('user_settings?user'); - UserSettings.find({user_id: Meteor.userId()}).forEach((userSettings) => { - instance.state.set('msgsViewBackDelta', userSettings.messages_view_backward_delta); - }); - }); - - instance.autorun(function () { - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'info'); - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'warning'); - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'error'); - }); -}); - -/* - * Helpers - */ - -Template.alarmIcons.helpers({ - isAdmin: function () { - return Roles.userIsInRole(Meteor.userId(), 'manage-users', Roles.GLOBAL_GROUP); - }, - - infosCount: function(){ - return Messages.find({level:'info'}).count(); - }, - - warningsCount: function(){ - return Messages.find({level:'warning'}).count(); - }, - - errorsCount: function(){ - return Messages.find({level:'error'}).count(); - }, - - msgCounterName: function (level) { - let instance = Template.instance(); - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${level}`; - - return counterName; - } -}); diff --git a/ui/imports/ui/components/alarm-icons/alarm-icons.styl b/ui/imports/ui/components/alarm-icons/alarm-icons.styl deleted file mode 100644 index 20bf947..0000000 --- a/ui/imports/ui/components/alarm-icons/alarm-icons.styl +++ /dev/null @@ -1 +0,0 @@ -// alarm icon styles diff --git a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.html b/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.html deleted file mode 100644 index 247e1ea..0000000 --- a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.html +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.js b/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.js deleted file mode 100644 index 23272de..0000000 --- a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.js +++ /dev/null @@ -1,51 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: AutoSearchResultLine - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './auto-search-result-line.html'; - -/* - * Lifecycles - */ - -Template.AutoSearchResultLine.onCreated(function() { -}); - -/* -Template.AutoSearchResultLine.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.AutoSearchResultLine.events({ - 'click': function(event, instance) { - event.stopPropagation(); - event.preventDefault(); - - instance.data.onClick(instance.data.namePath); - } -}); - -/* - * Helpers - */ - -Template.AutoSearchResultLine.helpers({ -}); - - diff --git a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.styl b/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.styl deleted file mode 100644 index df6caa5..0000000 --- a/ui/imports/ui/components/auto-search-result-line/auto-search-result-line.styl +++ /dev/null @@ -1,23 +0,0 @@ -.os-auto-search-result-line - cursor: pointer; - line-height: 1.1; - font-size: 1.1em; - padding: 5px 15px; - margin: 0 auto; - color: brand-blue - border-bottom: 1px solid #e8e8e8; - - &:hover - background-color: #f2f2f2; - - .sm-header-subline - display: block; - margin-bottom: 5px; - - .sm-detail-subline - display: block; - white-space: nowrap; - color: spark-grey - -.os-auto-search-result-line:last-child - border-bottom: none; diff --git a/ui/imports/ui/components/breadcrumb/breadcrumb.html b/ui/imports/ui/components/breadcrumb/breadcrumb.html deleted file mode 100644 index 0967b7d..0000000 --- a/ui/imports/ui/components/breadcrumb/breadcrumb.html +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/ui/imports/ui/components/breadcrumb/breadcrumb.js b/ui/imports/ui/components/breadcrumb/breadcrumb.js deleted file mode 100644 index 642797f..0000000 --- a/ui/imports/ui/components/breadcrumb/breadcrumb.js +++ /dev/null @@ -1,83 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: breadcrumb - */ - -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -//import { Inventory } from '/imports/api/inventories/inventories'; - -import '../breadcrumbNode/breadcrumbNode'; -import './breadcrumb.html'; - -Template.breadcrumb.onCreated(function () { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - nodeId: null, - nodesList: [], - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - nodeId: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('nodeId', data.nodeId); - }); - - instance.autorun(function () { - let nodeId = instance.state.get('nodeId'); - - if (R.isNil(nodeId)) { - return; - } - - Meteor.apply('expandNodePath', [ nodeId ], { wait: false }, function (err, res) { - if (err) { - console.error(err); - return; - } - - if (R.isNil(res)) { - instance.state.set('nodesList', []); - return; - } - - instance.state.set('nodesList', res); - }); - }); -}); - -Template.breadcrumb.onDestroyed(function () { -}); - -Template.breadcrumb.helpers({ - nodesList: function () { - let instance = Template.instance(); - return instance.state.get('nodesList'); - }, - - argsNode: function (node) { - //let instance = Template.instance(); - let data = Template.currentData(); - - return { - node: node, - onClick: function () { - data.onNodeSelected(node); - } - }; - }, -}); // end: helpers diff --git a/ui/imports/ui/components/breadcrumb/breadcrumb.styl b/ui/imports/ui/components/breadcrumb/breadcrumb.styl deleted file mode 100644 index f0417de..0000000 --- a/ui/imports/ui/components/breadcrumb/breadcrumb.styl +++ /dev/null @@ -1,3 +0,0 @@ -.os-breadcrumb - background-color: brand-blue; - margin-bottom: 0px; diff --git a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.html b/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.html deleted file mode 100644 index 041d2fa..0000000 --- a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.html +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.js b/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.js deleted file mode 100644 index 801df43..0000000 --- a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.js +++ /dev/null @@ -1,43 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: breadcrumbNode - */ - -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -import './breadcrumbNode.html'; - -Template.breadcrumbNode.onCreated(function () { - let instance = this; - instance.state = new ReactiveDict(); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - node: { type: Object, blackbox: true }, - onClick: { type: Function }, - }).validate(data); - }); - -}); - -Template.breadcrumbNode.helpers({ -}); - -Template.breadcrumbNode.events({ - 'click': function(event, instance) { - event.stopPropagation(); - event.preventDefault(); - - instance.data.onClick(); - } -}); diff --git a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.styl b/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.styl deleted file mode 100644 index e2915d8..0000000 --- a/ui/imports/ui/components/breadcrumbNode/breadcrumbNode.styl +++ /dev/null @@ -1,4 +0,0 @@ -.os-breadcrumb-node - a - color: white; - cursor pointer diff --git a/ui/imports/ui/components/clique-constraint/clique-constraint.html b/ui/imports/ui/components/clique-constraint/clique-constraint.html deleted file mode 100644 index 0583872..0000000 --- a/ui/imports/ui/components/clique-constraint/clique-constraint.html +++ /dev/null @@ -1,96 +0,0 @@ - - diff --git a/ui/imports/ui/components/clique-constraint/clique-constraint.js b/ui/imports/ui/components/clique-constraint/clique-constraint.js deleted file mode 100644 index 75623eb..0000000 --- a/ui/imports/ui/components/clique-constraint/clique-constraint.js +++ /dev/null @@ -1,329 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: CliqueConstraint - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { CliqueConstraints } from '/imports/api/clique-constraints/clique-constraints'; -//import { Environments } from '/imports/api/environments/environments'; -import { Constants } from '/imports/api/constants/constants'; -import { insert, remove, update } from '/imports/api/clique-constraints/methods'; -import { parseReqId } from '/imports/lib/utilities'; - -import './clique-constraint.html'; - -/* - * Lifecycles - */ - -Template.CliqueConstraint.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - //env: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - pageHeader: 'Clique Constraint' - }); - - instance.autorun(function () { - let controller = Iron.controller(); - let params = controller.getParams(); - let query = params.query; - - new SimpleSchema({ - action: { type: String, allowedValues: ['insert', 'view', 'remove', 'update'] }, - id: { type: String, optional: true } - }).validate(query); - - switch (query.action) { - case 'insert': - initInsertView(instance, query); - break; - - case 'view': - initViewView(instance, query); - break; - - case 'update': - initUpdateView(instance, query); - break; - - case 'remove': - initRemoveView(instance, query); - break; - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.CliqueConstraint.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.CliqueConstraint.events({ - 'submit .sm-item-form': function(event, instance) { - event.preventDefault(); - - let _id = instance.state.get('id'); - //let env = instance.$('.sm-input-env')[0].value; - let focalPointType = instance.$('.sm-input-focal-point-type')[0].value; - let constraints = R.map(R.prop('value'), - instance.$('.sm-input-constraints')[0].selectedOptions); - - submitItem(instance, - _id, - //env, - focalPointType, - constraints - ); - } -}); - -/* - * Helpers - */ - -Template.CliqueConstraint.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - objectTypesList: function () { - return R.ifElse(R.isNil, R.always([]), R.prop('data') - )(Constants.findOne({ name: 'object_types_for_links' })); - }, - - /* - envsList: function () { - return Environments.find({}); - }, - */ - - getAttrDisabled: function () { - let instance = Template.instance(); - let result = {}; - let action = instance.state.get('action'); - - if (R.contains(action, ['view', 'remove'])) { - result = R.assoc('disabled', true, result); - } - - return result; - }, - - getModel: function () { - let instance = Template.instance(); - return instance.state.get('model'); - }, - - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - getAttrSelected: function (optionValue, modelValue) { - let result = {}; - - if (optionValue === modelValue) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - getAttrSelectedMultiple: function (optionValue, modelValues) { - let result = {}; - - if (R.isNil(modelValues)) { return result; } - - if (R.contains(optionValue, modelValues)) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - } -}); - - -function initInsertView(instance, query) { - instance.state.set('action', query.action); - instance.state.set('model', CliqueConstraints.schema.clean({ - })); - - subscribeToOptionsData(instance); - //instance.subscribe('link_types?env', query.env); -} - -function initViewView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - - instance.subscribe('clique_constraints?_id', reqId.id); - - CliqueConstraints.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); -} - -function initUpdateView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('clique_constraints?_id', reqId.id); - - CliqueConstraints.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); -} - -function initRemoveView(instance, query) { - initViewView(instance, query); -} - -function subscribeToOptionsData(instance) { -// instance.subscribe('environments_config'); - instance.subscribe('link_types'); - instance.subscribe('constants'); -} - -function submitItem( - instance, - id, - focal_point_type, - constraints - ) { - - let action = instance.state.get('action'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - focal_point_type: focal_point_type, - constraints: constraints, - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: id.id, - focal_point_type: focal_point_type, - constraints: constraints, - }, processActionResult.bind(null, instance)); - break; - - case 'remove': - remove.call({ - _id: id.id - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - return; - } - - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - switch (action) { - case 'insert': - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - break; - - case 'remove': - instance.state.set('message', 'Record had been removed successfully'); - instance.state.set('disabled', true); - break; - - case 'update': - instance.state.set('message', 'Record had been updated successfully'); - break; - } - - Router.go('/clique-constraints-list'); -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - case 'update': - return 'Update'; - default: - return 'Submit'; - } -} diff --git a/ui/imports/ui/components/clique-constraint/clique-constraint.styl b/ui/imports/ui/components/clique-constraint/clique-constraint.styl deleted file mode 100644 index 72d2348..0000000 --- a/ui/imports/ui/components/clique-constraint/clique-constraint.styl +++ /dev/null @@ -1,35 +0,0 @@ -.os-clique-constraint - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 120px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; - diff --git a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.html b/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.html deleted file mode 100644 index 111c31b..0000000 --- a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.html +++ /dev/null @@ -1,52 +0,0 @@ - - diff --git a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.js b/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.js deleted file mode 100644 index 79c31e4..0000000 --- a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.js +++ /dev/null @@ -1,77 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: CliqueConstraintsList - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { CliqueConstraints } from '/imports/api/clique-constraints/clique-constraints'; -import { Roles } from 'meteor/alanning:roles'; - -import './clique-constraints-list.html'; - -/* - * Lifecycles - */ - -Template.CliqueConstraintsList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - }); - - instance.autorun(function () { - //let data = Template.currentData(); - - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - }).validate(query); - - instance.subscribe('clique_constraints'); - }); -}); - -/* -Template.CliqueConstraintsList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.CliqueConstraintsList.events({ -}); - -/* - * Helpers - */ - -Template.CliqueConstraintsList.helpers({ - cliqueConstraints: function () { - //let instance = Template.instance(); - - //var env = instance.state.get('env'); - //return Scans.find({ environment: env }); - return CliqueConstraints.find({}); - }, - - isAuthManageCliqueConstraints: function () { - return Roles.userIsInRole(Meteor.userId(), 'manage-clique-constraints', Roles.GLOBAL_GROUP); - }, -}); /// end: helpers - - diff --git a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.styl b/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.styl deleted file mode 100644 index 9c3072c..0000000 --- a/ui/imports/ui/components/clique-constraints-list/clique-constraints-list.styl +++ /dev/null @@ -1,22 +0,0 @@ -.os-clique-constraints-list - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-clique-constraints-table - th - color: spark-blue - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-add-new-link - color: spark-blue diff --git a/ui/imports/ui/components/clique-type/clique-type.html b/ui/imports/ui/components/clique-type/clique-type.html deleted file mode 100644 index 7130383..0000000 --- a/ui/imports/ui/components/clique-type/clique-type.html +++ /dev/null @@ -1,100 +0,0 @@ - - diff --git a/ui/imports/ui/components/clique-type/clique-type.js b/ui/imports/ui/components/clique-type/clique-type.js deleted file mode 100644 index 9b21442..0000000 --- a/ui/imports/ui/components/clique-type/clique-type.js +++ /dev/null @@ -1,375 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: CliqueType - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import { Constants } from '/imports/api/constants/constants'; -import { CliqueTypes } from '/imports/api/clique-types/clique-types'; -import { Environments } from '/imports/api/environments/environments'; -import { Constants } from '/imports/api/constants/constants'; -import { LinkTypes } from '/imports/api/link-types/link-types'; -import { insert, update, remove } from '/imports/api/clique-types/methods'; -import { parseReqId } from '/imports/lib/utilities'; - -import '/imports/ui/components/selectable-ordered-input/selectable-ordered-input'; - -import './clique-type.html'; - -/* - * Lifecycles - */ - -Template.CliqueType.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - //env: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - pageHeader: 'Clique Type' - }); - - instance.autorun(function () { - let controller = Iron.controller(); - let params = controller.getParams(); - let query = params.query; - - new SimpleSchema({ - action: { type: String, allowedValues: ['insert', 'view', 'update', 'remove'] }, - env: { type: String, optional: true }, - id: { type: String, optional: true } - }).validate(query); - - switch (query.action) { - case 'insert': - initInsertView(instance, query); - break; - - case 'view': - initViewView(instance, query); - break; - - case 'update': - initUpdateView(instance, query); - break; - - case 'remove': - initRemoveView(instance, query); - break; - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.CliqueType.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.CliqueType.events({ - 'submit .sm-item-form': function(event, instance) { - event.preventDefault(); - - let _id = instance.state.get('id'); - let env = instance.$('.sm-input-env')[0].value; - let focalPointType = instance.$('.sm-input-focal-point-type')[0].value; - let linkTypes = R.path(['link_types'], instance.state.get('model')); - let name = instance.$('.sm-input-name')[0].value; - - submitItem(instance, - _id, - env, - focalPointType, - linkTypes, - name - ); - } -}); - -/* - * Helpers - */ - -Template.CliqueType.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - objectTypesList: function () { - return R.ifElse(R.isNil, R.always([]), R.prop('data') - )(Constants.findOne({ name: 'object_types_for_links' })); - }, - - linkTypesList: function () { - return LinkTypes.find({}); - }, - - envsList: function () { - return Environments.find({}); - }, - - getAttrDisabled: function () { - let instance = Template.instance(); - let result = {}; - let action = instance.state.get('action'); - - if (R.contains(action, ['view', 'remove'])) { - result = R.assoc('disabled', true, result); - } - - return result; - }, - - getModel: function () { - let instance = Template.instance(); - return instance.state.get('model'); - }, - - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - getAttrSelected: function (optionValue, modelValue) { - let result = {}; - - if (optionValue === modelValue) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - getAttrSelectedMultiple: function (optionValue, modelValues) { - let result = {}; - - if (R.isNil(modelValues)) { return result; } - - if (R.contains(optionValue, modelValues)) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - }, - - argsLinkTypesInput: function (linkTypesList, chosenLinkTypes) { - let instance = Template.instance(); - - let options = R.map((linkType) => { - return { value: linkType.type, label: linkType.type }; - }, linkTypesList); - - let product = R.map((linkTypeVal) => { - return { value: linkTypeVal, label: linkTypeVal }; - }, chosenLinkTypes); - - return { - choices: options, - product: product, - onProductChange: function (product) { - let model = instance.state.get('model'); - let link_types = R.map(R.prop('value'), product); - model = R.assoc('link_types', link_types, model); - instance.state.set('model', model); - }, - }; - }, - - exists: function (val) { - return ! R.isNil(val); - } -}); // end: helpers - -function initInsertView(instance, query) { - instance.state.set('action', query.action); - instance.state.set('env', query.env); - instance.state.set('model', CliqueTypes.schema.clean({ - environment: instance.state.get('env') - })); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - //instance.subscribe('link_types?env', query.env); -} - -function initViewView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - instance.subscribe('clique_types?_id', reqId.id); - - CliqueTypes.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); - -} - -function initUpdateView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - instance.subscribe('clique_types?_id', reqId.id); - - CliqueTypes.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); -} - -function initRemoveView(instance, query) { - initViewView(instance, query); -} - -function subscribeToOptionsData(instance) { - instance.subscribe('environments_config'); - instance.subscribe('link_types'); -} - -function submitItem( - instance, - id, - env, - focal_point_type, - link_types, - name -) { - - let action = instance.state.get('action'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - environment: env, - focal_point_type: focal_point_type, - link_types: link_types, - name: name - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: id.id, - environment: env, - focal_point_type: focal_point_type, - link_types: link_types, - name: name - }, processActionResult.bind(null, instance)); - break; - - case 'remove': - remove.call({ - _id: id.id - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - return; - } - - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - switch (action) { - case 'insert': - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - break; - - case 'remove': - instance.state.set('message', 'Record had been removed successfully'); - instance.state.set('disabled', true); - break; - - case 'update': - instance.state.set('message', 'Record had been updated successfully'); - break; - } - - Router.go('/clique-types-list'); -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - case 'update': - return 'Update'; - default: - return 'Submit'; - } -} diff --git a/ui/imports/ui/components/clique-type/clique-type.styl b/ui/imports/ui/components/clique-type/clique-type.styl deleted file mode 100644 index 11c42df..0000000 --- a/ui/imports/ui/components/clique-type/clique-type.styl +++ /dev/null @@ -1,54 +0,0 @@ -.os-clique-type - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 120px; - margin: 0 5px; - - >.cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; - - .sm-field-group-link-types - .os-selectable-ordered-input - width: 400px; - - .cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - //width: 400px; - margin: 0 5px; diff --git a/ui/imports/ui/components/clique-types-list/clique-types-list.html b/ui/imports/ui/components/clique-types-list/clique-types-list.html deleted file mode 100644 index e4badf9..0000000 --- a/ui/imports/ui/components/clique-types-list/clique-types-list.html +++ /dev/null @@ -1,56 +0,0 @@ - - diff --git a/ui/imports/ui/components/clique-types-list/clique-types-list.js b/ui/imports/ui/components/clique-types-list/clique-types-list.js deleted file mode 100644 index 7f3f149..0000000 --- a/ui/imports/ui/components/clique-types-list/clique-types-list.js +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: CliqueTypesList - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { CliqueTypes } from '/imports/api/clique-types/clique-types'; -import { Roles } from 'meteor/alanning:roles'; - -import './clique-types-list.html'; - -/* - * Lifecycles - */ - -Template.CliqueTypesList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null - }); - - instance.autorun(function () { - //let data = Template.currentData(); - - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - env: { type: String, optional: true }, - }).validate(query); - - let env = query.env; - instance.state.set('env', env); - - instance.subscribe('clique_types?env*', env); - }); -}); - -/* -Template.CliqueTypesList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.CliqueTypesList.events({ -}); - -/* - * Helpers - */ - -Template.CliqueTypesList.helpers({ - cliqueTypes: function () { - //let instance = Template.instance(); - - //var env = instance.state.get('env'); - //return Scans.find({ environment: env }); - return CliqueTypes.find({}); - }, - - isAuthManageCliqueTypes: function () { - return Roles.userIsInRole(Meteor.userId(), 'manage-clique-types', Roles.GLOBAL_GROUP); - }, -}); - - diff --git a/ui/imports/ui/components/clique-types-list/clique-types-list.styl b/ui/imports/ui/components/clique-types-list/clique-types-list.styl deleted file mode 100644 index d4e08a2..0000000 --- a/ui/imports/ui/components/clique-types-list/clique-types-list.styl +++ /dev/null @@ -1,22 +0,0 @@ -.os-clique-types-list - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-clique-types-table - th - color: spark-blue - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-add-new-link - color: spark-blue diff --git a/ui/imports/ui/components/d3graph/d3graph.html b/ui/imports/ui/components/d3graph/d3graph.html deleted file mode 100644 index 52d84b5..0000000 --- a/ui/imports/ui/components/d3graph/d3graph.html +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/ui/imports/ui/components/d3graph/d3graph.js b/ui/imports/ui/components/d3graph/d3graph.js deleted file mode 100644 index 41177ed..0000000 --- a/ui/imports/ui/components/d3graph/d3graph.js +++ /dev/null @@ -1,126 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: d3graph - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { Cliques } from '/imports/api/cliques/cliques.js'; -import { Links } from '/imports/api/links/links.js'; - -import { d3Graph } from '/imports/lib/d3-graph'; - -import './d3graph.html'; - -/* - * Lifecycles - */ - -Template.d3graph.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id_path: null, - ready: false - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - id_path: { type: String }, - }).validate(data); - - instance.state.set('ready', false); - let id_path = data.id_path; - - instance.subscribe('inventory?id_path', id_path); - instance.subscribe('attributes_for_hover_on_data'); - - Inventory.find({ id_path: id_path }).forEach((inventory) => { - instance.state.set('_id', inventory._id); - - if (inventory.clique) { - - if (inventory.id === 'aggregate-WebEx-RTP-SSD-Aggregate-node-24') { - let objId = 'node-24'; - instance.subscribe('inventory?type+host', 'instance', objId); - - } else { - let objId = inventory._id._str; - instance.subscribe('cliques?focal_point', objId); - - Cliques.find({ - focal_point: new Mongo.ObjectID(objId) - }) - .forEach( - function (cliqueItem) { - instance.subscribe('links?_id-in', cliqueItem.links); - - Links.find({ _id: {$in: cliqueItem.links} }) - .forEach(function(linkItem) { - let idsList = [ linkItem['source'], linkItem['target'] ]; - instance.subscribe('inventory?_id-in', idsList); - - Inventory.find({ _id: { $in: idsList } }) - .forEach(function (invItem) { - instance.subscribe('attributes_for_hover_on_data?type', invItem.type); - }); - }); - - instance.state.set('ready', true); - }); - } - } - }); - }); -}); - -Template.d3graph.rendered = function () { - let instance = Template.instance(); - let element = instance.$('#dgraphid')[0]; - d3Graph.createGraphData(element.clientWidth, element.clientHeight); - - Tracker.autorun(function () { - var nodeId = instance.state.get('_id'); - var ready = instance.state.get('ready'); - - if (! ready) { return; } - if(R.isNil(nodeId)) { return; } - - setTimeout(() => { - let graphData = d3Graph.getGraphDataByClique(nodeId._str); - setTimeout(() => { - d3Graph.updateNetworkGraph(graphData); - }, 100); - }, 500); - }); -}; - -/* - * Events - */ - -Template.d3graph.events({ -}); - -/* - * Helpers - */ - -Template.d3graph.helpers({ -}); - - diff --git a/ui/imports/ui/components/d3graph/d3graph.styl b/ui/imports/ui/components/d3graph/d3graph.styl deleted file mode 100644 index 27908be..0000000 --- a/ui/imports/ui/components/d3graph/d3graph.styl +++ /dev/null @@ -1,12 +0,0 @@ -#dgraphid - width: 100%; - height: 100%; - - svg.os-d3-graph { - /*background-color: antiquewhite;*/ - /*background-color: rgb(161, 183, 206);*/ - background-color:#FDFEFF; - /*height:100vh; */ - /* padding-top: 100px; */ - - } diff --git a/ui/imports/ui/components/dashboard/dashboard.html b/ui/imports/ui/components/dashboard/dashboard.html deleted file mode 100644 index 1edf507..0000000 --- a/ui/imports/ui/components/dashboard/dashboard.html +++ /dev/null @@ -1,62 +0,0 @@ - - diff --git a/ui/imports/ui/components/dashboard/dashboard.js b/ui/imports/ui/components/dashboard/dashboard.js deleted file mode 100644 index 625f8ee..0000000 --- a/ui/imports/ui/components/dashboard/dashboard.js +++ /dev/null @@ -1,273 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: Dashboard - */ - -//import * as R from 'ramda'; -import * as _ from 'lodash'; -import { Environments } from '/imports/api/environments/environments'; -import { //Messages, - calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessagesInfoBox -} from '/imports/api/messages/messages'; -import { Template } from 'meteor/templating'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { Counts } from 'meteor/tmeasday:publish-counts'; -//import { Counter } from 'meteor/natestrauser:publish-performant-counts'; -//import { Messages } from '/imports/api/messages/messages'; -import { store } from '/imports/ui/store/store'; -import { setMainAppSelectedEnvironment } from '/imports/ui/actions/main-app.actions'; -import { UserSettings } from '/imports/api/user-settings/user-settings'; - -import '/imports/ui/components/messages-info-box/messages-info-box'; -import '/imports/ui/components/environment-box/environment-box'; - -import './dashboard.html'; - -/* - * Lifecycle methods - */ - -Template.Dashboard.onCreated(function () { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - msgsViewBackDelta: 1 - }); - - instance.autorun(function () { - instance.subscribe('environments_config'); - - instance.subscribe('messages/count?level', 'info'); - instance.subscribe('messages/count?level', 'warning'); - instance.subscribe('messages/count?level', 'error'); - - Environments.find({}).forEach(function (envItem) { - instance.subscribe('inventory?env+type', envItem.name, 'instance'); - instance.subscribe('inventory?env+type', envItem.name, 'vservice'); - instance.subscribe('inventory?env+type', envItem.name, 'host'); - instance.subscribe('inventory?env+type', envItem.name, 'vconnector'); - instance.subscribe('inventory?env+type', envItem.name, 'project'); - instance.subscribe('inventory?env+type', envItem.name, 'region'); - }); - - store.dispatch(setMainAppSelectedEnvironment(null)); - }); - - instance.autorun(function () { - instance.subscribe('user_settings?user'); - UserSettings.find({user_id: Meteor.userId()}).forEach((userSettings) => { - instance.state.set('msgsViewBackDelta', userSettings.messages_view_backward_delta); - }); - }); - - instance.autorun(function () { - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'info'); - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'warning'); - instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'error'); - }); -}); - -Template.Dashboard.rendered = function(){ - - /* - $.getScript('https://www.gstatic.com/charts/loader.js', function() { - google.charts.load('current', {'packages':['gauge', 'line']}); - google.charts.setOnLoadCallback(drawLine); - - - function drawLine() { - var data = new google.visualization.DataTable(); - data.addColumn('number', 'Traffic Webex'); - data.addColumn('number', 'Traffic metapod'); - data.addColumn('number', 'Some other Traffic'); - data.addColumn('number', 'Some other Traffic'); - - data.addRows([ - [1, 37.8, 80.8, 41.8], - [2, 30.9, 69.5, 32.4], - [3, 25.4, 57, 25.7], - [4, 11.7, 18.8, 32.5], - [5, 11.9, 25.6, 10.4], - [6, 68.8, 13.6, 27.7], - [7, 7.6, 42.3, 9.6], - [8, 12.3, 29.2, 10.6], - [9, 16.9, 42.9, 14.8] - ]); - - var options = { - chart: { - title: 'Network traffic throughput', - subtitle: 'in Mbps' - } - }; - - var chart = new google.charts.Line(document.getElementById('curve_chart')); - - chart.draw(data, options); - } - }); - - */ -}; -/* - * Helpers - */ - -Template.Dashboard.helpers({ - - envList:function(){ - //return Environments.find({type:'environment'}); - return Environments.find({}); - }, - - instancesCount: function (envName){ - //return Inventory.find({environment: envName, type:'instance'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'instance'); - }, - - vservicesCount: function (envName) { - //return Inventory.find({environment: envName, type:'vservice'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'vservice'); - }, - - hostsCount: function (envName) { - //return Inventory.find({environment: envName, type:'host'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'host'); - }, - - vconnectorsCount: function(envName){ - //return Inventory.find({environment: envName, type:'vconnector'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'vconnector'); - }, - - projectsCount: function (envName){ - //return Inventory.find({environment: envName, type:'project'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'project'); - }, - - regoinsCount: function (envName){ - //return Inventory.find({environment: envName, type:'region'}).count(); - return Counts.get('inventory?env+type!counter?env=' + - envName + '&type=' + 'region'); - }, - - regoins: function (envName) { - return Inventory.find({environment: envName, type:'region'}); - }, - - projects: function (envName){ - return Inventory.find({environment: envName, type:'project'}); - }, - - notificationsCount: function(){ - //return Messages.find({level:'notify'}).count(); - return Counts.get('messages?level!counter?' + - 'level=' + 'notify'); - }, - - warningsCount: function(){ - //return Messages.find({level:'warn'}).count(); - return Counts.get('messages?level!counter?' + - 'level=' + 'warn'); - }, - - errorsCount: function(){ - //return Messages.find({level:'error'}).count(); - return Counts.get('messages?level!counter?' + - 'level=' + 'error'); - }, - /* - notificationsTimestamp: function(){ - var msgTimestamp = Messages.findOne({state:'added'},{fields: {'timestamp': 1} }); - return msgTimestamp.timestamp; - }, - warnings: function(){ - return Messages.findOne({state:'warn'}); - }, - errors: function(){ - return Messages.findOne({state:'down'}); - }, -*/ - - getListMessagesInfoBox: function () { - return [ - { - level: 'info' - }, - { - level: 'warning' - }, - { - level: 'error' - }, - ]; - }, - - msgCounterName: function (level) { - let instance = Template.instance(); - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${level}`; - - return counterName; - }, - - argsMessagesInfoBox: function(boxDef, messageCount) { - //let instance = Template.instance(); - let title = _.capitalize(boxDef.level); - - return { - title: title, - count: messageCount, - lastScanTimestamp: lastMessageTimestamp(boxDef.level), - icon: calcIconForMessageLevel(boxDef.level), - colorClass: calcColorClassForMessagesInfoBox(boxDef.level), - onMoreDetailsReq: function () { - $('#messagesModalGlobal').modal('show', { - dataset: { - messageLevel: boxDef.level, - } - }); - } - }; - }, - - argsEnvBox: function ( - environmentName, - regionsCount, - regions, - projectsCount, - projects, - instancesCount, - vservicesCount, - vconnectorsCount, - hostsCount - ) { - - return { - environmentName: environmentName, - regionsCount: regionsCount, - regions: regions, - projectsCount, - projects: projects, - instancesCount: instancesCount, - vservicesCount: vservicesCount, - vconnectorsCount: vconnectorsCount, - hostsCount: hostsCount, - }; - } -}); // end: helpers diff --git a/ui/imports/ui/components/dashboard/dashboard.styl b/ui/imports/ui/components/dashboard/dashboard.styl deleted file mode 100644 index e7d58fc..0000000 --- a/ui/imports/ui/components/dashboard/dashboard.styl +++ /dev/null @@ -1,40 +0,0 @@ -.os-dashboard - display: flex; - flex-flow: row nowrap; - - .sm-main-layout-no-nav - flex: 1 0 0; - - display: flex; - flex-flow: column nowrap; - - .sm-main-row - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - - .sm-environments - flex: 3 0 0; - display: flex; - flex-flow: row wrap; - justify-content: center; - - padding: 50px; - margin: -20px; - - >.item - margin: 20px; - width: 700px; - - .sm-side-container - flex: 0 0 0; - display: flex; - justify-content: center; - - padding: 50px; - - .sm-messages-section - display: flex; - flex-flow: column nowrap; - - min-width: 350px; diff --git a/ui/imports/ui/components/data-cubic/data-cubic.html b/ui/imports/ui/components/data-cubic/data-cubic.html deleted file mode 100644 index 1849b78..0000000 --- a/ui/imports/ui/components/data-cubic/data-cubic.html +++ /dev/null @@ -1,23 +0,0 @@ - - diff --git a/ui/imports/ui/components/data-cubic/data-cubic.js b/ui/imports/ui/components/data-cubic/data-cubic.js deleted file mode 100644 index ac0860a..0000000 --- a/ui/imports/ui/components/data-cubic/data-cubic.js +++ /dev/null @@ -1,71 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: DataCubic - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Icon } from '/imports/lib/icon'; - -import './data-cubic.html'; - -/* - * Lifecycles - */ - -Template.DataCubic.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - theme: null - }); - - this.autorun(() => { - new SimpleSchema({ - header: { type: String }, - dataInfo: { type: String }, - icon: { type: Icon }, - theme: { type: String, optional: true } - }).validate(Template.currentData()); - - let theme = Template.currentData().theme; - theme = R.isNil(theme) ? 'light' : theme; - instance.state.set('theme', theme); - }); -}); - -/* -Template.DataCubic.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.DataCubic.events({ -}); - -/* - * Helpers - */ - -Template.DataCubic.helpers({ - getTheme: function () { - let instance = Template.instance(); - return instance.state.get('theme'); - } -}); - - diff --git a/ui/imports/ui/components/data-cubic/data-cubic.styl b/ui/imports/ui/components/data-cubic/data-cubic.styl deleted file mode 100644 index 4bdb9b3..0000000 --- a/ui/imports/ui/components/data-cubic/data-cubic.styl +++ /dev/null @@ -1,27 +0,0 @@ -.os-data-cubic - display: flex; - flex-flow: row nowrap; - justify-content: center; - - .sm-container - display: flex; - flex-flow: row nowrap; - - .sm-icon-part - flex: 1 - - .sm-info-part - flex: 2 - - display: flex; - flex-flow: column nowrap - - .sm-data-info - font-size: 12px; - -.os-data-cubic.cl-theme-dark - background-color: dk-gray1 - -.os-data-cubic.cl-theme-light - color: spark-blue - background-color: #fff diff --git a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.html b/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.html deleted file mode 100644 index 27e2780..0000000 --- a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.html +++ /dev/null @@ -1,58 +0,0 @@ - - diff --git a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.js b/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.js deleted file mode 100644 index 1f0917f..0000000 --- a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.js +++ /dev/null @@ -1,57 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: DetailedNodeInfoBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; - -import './detailed-node-info-box.html'; - -/* - * Lifecycles - */ - -Template.DetailedNodeInfoBox.onCreated(function() { - var instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - node: { type: Object, blackbox: true }, - }).validate(data); - }); -}); - -/* -Template.DetailedNodeInfoBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.DetailedNodeInfoBox.events({ -}); - -/* - * Helpers - */ - -Template.DetailedNodeInfoBox.helpers({ -}); - - diff --git a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.styl b/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.styl deleted file mode 100644 index e49ea6e..0000000 --- a/ui/imports/ui/components/detailed-node-info-box/detailed-node-info-box.styl +++ /dev/null @@ -1,41 +0,0 @@ -.os-detailed-node-info-box - display: flex; - flex-flow: row nowrap; - - .sm-icon-segment - flex: 0 1 70px; - - .sm-info-segment - flex: 1; - display: flex; - flex-flow: column nowrap; - overflow: auto; - - .sm-info-title - color: #0a9ad7; - font-size: 2em; - border-bottom: 3px solid #0a9ad7; - line-height: 1.5em; - - .sm-info-bits - padding: 5px 0px; - - display: flex; - flex-flow: column nowrap; - - .cl-info-bit - display: flex; - flex-flow: row nowrap; - - .cl-label - flex: 0 0 110px; - color: black; - font-weight: bold; - - .sm-info-json - >.cl-label - color: black; - font-weight: bold; - - >.cl-data - white-space: pre; diff --git a/ui/imports/ui/components/env-aci-info/env-aci-info.html b/ui/imports/ui/components/env-aci-info/env-aci-info.html deleted file mode 100644 index dc22ac4..0000000 --- a/ui/imports/ui/components/env-aci-info/env-aci-info.html +++ /dev/null @@ -1,88 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-aci-info/env-aci-info.js b/ui/imports/ui/components/env-aci-info/env-aci-info.js deleted file mode 100644 index bfe8935..0000000 --- a/ui/imports/ui/components/env-aci-info/env-aci-info.js +++ /dev/null @@ -1,65 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvAcinfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-aci-info.html'; - -/* - * Lifecycles - */ - -Template.EnvAciInfo.onCreated(function() { -}); - -/* -Template.EnvAciInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvAciInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvAciInfo.helpers({ - createInputArgs: createInputArgs, - - markIfDisabled: function () { - let instance = Template.instance(); - let attrs = {}; - if (instance.data.disabled) { - attrs = R.assoc('disabled', true, attrs); - } - - return attrs; - } -}); diff --git a/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.html b/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.html deleted file mode 100644 index e925f9e..0000000 --- a/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.html +++ /dev/null @@ -1,108 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.js b/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.js deleted file mode 100644 index 498a403..0000000 --- a/ui/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info.js +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvAmqpCredentialsInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-amqp-credentials-info.html'; - -/* - * Lifecycles - */ - -Template.EnvAmqpCredentialsInfo.onCreated(function() { -}); - -/* -Template.EnvAmqpCredentialsInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvAmqpCredentialsInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvAmqpCredentialsInfo.helpers({ - createInputArgs: createInputArgs -}); - - diff --git a/ui/imports/ui/components/env-delete-modal/env-delete-modal.html b/ui/imports/ui/components/env-delete-modal/env-delete-modal.html deleted file mode 100644 index 40ac5d9..0000000 --- a/ui/imports/ui/components/env-delete-modal/env-delete-modal.html +++ /dev/null @@ -1,48 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-delete-modal/env-delete-modal.js b/ui/imports/ui/components/env-delete-modal/env-delete-modal.js deleted file mode 100644 index 7784c4d..0000000 --- a/ui/imports/ui/components/env-delete-modal/env-delete-modal.js +++ /dev/null @@ -1,55 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvDeleteModal - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -import './env-delete-modal.html'; - -/* - * Lifecycles - */ - -Template.EnvDeleteModal.onCreated(function() { - this.autorun(() => { - new SimpleSchema({ - onDeleteReq: { type: Function }, - }).validate(Template.currentData()); - }); -}); - -/* -Template.EnvDeleteModal.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvDeleteModal.events({ - 'click .sm-button-delete': function (_event, _instance) { - let onDeleteReq = Template.currentData().onDeleteReq; - onDeleteReq(); - } -}); - -/* - * Helpers - */ - -Template.EnvDeleteModal.helpers({ -}); - - diff --git a/ui/imports/ui/components/env-delete-modal/env-delete-modal.styl b/ui/imports/ui/components/env-delete-modal/env-delete-modal.styl deleted file mode 100644 index 5fde285..0000000 --- a/ui/imports/ui/components/env-delete-modal/env-delete-modal.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "EnvDeleteModal" diff --git a/ui/imports/ui/components/env-form/env-form.html b/ui/imports/ui/components/env-form/env-form.html deleted file mode 100644 index a0fd3bd..0000000 --- a/ui/imports/ui/components/env-form/env-form.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/ui/imports/ui/components/env-form/env-form.js b/ui/imports/ui/components/env-form/env-form.js deleted file mode 100644 index 3007021..0000000 --- a/ui/imports/ui/components/env-form/env-form.js +++ /dev/null @@ -1,94 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: envForm - */ - -import * as R from 'ramda'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Environments } from '/imports/api/environments/environments'; -import { parseReqId } from '/imports/lib/utilities'; - -import './env-form.html'; - -/* - * Lifecycle methods - */ - -Template.envForm.onCreated(function () { - var instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - selectedEnv: null - }); - - - instance.autorun(function() { - let data = R.when(R.isNil, R.always({}), Template.currentData()); - - new SimpleSchema({ - selectedEnvironment: { - type: Object, - blackbox: true, - optional: true - }, - onEnvSelected: { type: Function } - }).validate(data); - - instance.state.set('selectedEnv', data.selectedEnvironment); - - instance.subscribe('environments_config'); - }); -}); - -/* - * Events - */ - -Template.envForm.events = { - 'click .os-env-form-dropdown-menu .sm-env-item': function (event, _instance) { - event.preventDefault(); - - let envName = R.path(['target','dataset', 'envName'], event); - let _id = R.path(['target', 'dataset', 'envId'], event); - - if (R.isNil(envName)) { return; } - _id = parseReqId(_id); - - let data = Template.currentData(); - if (data.onEnvSelected) { - data.onEnvSelected({ - _id: _id.id, - name: envName - }); - } - } -}; - -/* - * Helpers - */ - -Template.envForm.helpers({ - selectedEnvName: function () { - let instance = Template.instance(); - let selectedEnv = instance.state.get('selectedEnv'); - - let envName = R.when( - R.isNil, - R.always('My Environments') - )(R.path(['name'], selectedEnv)); - - return envName; - }, - - envList: function () { - return Environments.find({}); - }, -}); diff --git a/ui/imports/ui/components/env-form/env-form.styl b/ui/imports/ui/components/env-form/env-form.styl deleted file mode 100644 index e69de29..0000000 diff --git a/ui/imports/ui/components/env-main-info/env-main-info.html b/ui/imports/ui/components/env-main-info/env-main-info.html deleted file mode 100644 index f5d5df7..0000000 --- a/ui/imports/ui/components/env-main-info/env-main-info.html +++ /dev/null @@ -1,213 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-main-info/env-main-info.js b/ui/imports/ui/components/env-main-info/env-main-info.js deleted file mode 100644 index a5ed0d6..0000000 --- a/ui/imports/ui/components/env-main-info/env-main-info.js +++ /dev/null @@ -1,133 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvMainInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import '/imports/ui/components/input-model/input-model'; -import '/imports/ui/components/select-model/select-model'; -import { createInputArgs } from '/imports/ui/lib/input-model'; -import { createSelectArgs } from '/imports/ui/lib/select-model'; -import { Constants } from '/imports/api/constants/constants'; - -import './env-main-info.html'; - -/* - * Lifecycles - */ - -Template.EnvMainInfo.onCreated(function () { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - action: null, - }); - - instance.autorun(function () { - let action = Template.currentData().action; - instance.state.set('action', action); - - instance.subscribe('constants'); - }); - -}); - -/* -Template.EnvironmentWizard.rendered = function(){ -}; -*/ - -/* - * Helpers - */ - -Template.EnvMainInfo.helpers({ - /* - createInputArgs: function (params) { - let instance = Template.instance(); - return { - context: params.hash.context, - key: params.hash.key, - type: params.hash.type, - placeholder: params.hash.placeholder, - setModel: instance.data.setModel - }; - }*/ - createInputArgs: createInputArgs, - - createSelectArgs: createSelectArgs, - - distributionOptions: function () { - let item = Constants.findOne({ name: 'distributions' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - distributionVersionOptions: function () { - let item = Constants.findOne({ name: 'distribution_versions' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - /* depracated - networkOptions: function () { - let item = Constants.findOne({ name: 'network_plugins' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - */ - - typeDriversOptions: function () { - let item = Constants.findOne({ name: 'type_drivers' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - mechanismDriversOptions: function () { - let item = Constants.findOne({ name: 'mechanism_drivers' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - isFieldDisabled: function (fieldName, globalDisabled) { - let instance = Template.instance(); - if (globalDisabled) { return true; } - - return isDisabledByField(fieldName, instance.state.get('action')); - } -}); - -/* - * Events - */ - -Template.EnvMainInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - } -}); - -function isDisabledByField(fieldName, actionName) { - if (R.contains(fieldName, ['name', 'distribution']) && actionName !== 'insert') { - return true; - } - - if (R.contains(fieldName, ['name', 'distribution_version']) && actionName !== 'insert') { - return true; - } - - return false; -} diff --git a/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.html b/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.html deleted file mode 100644 index 95c52a0..0000000 --- a/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.html +++ /dev/null @@ -1,109 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.js b/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.js deleted file mode 100644 index 8aaefe4..0000000 --- a/ui/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info.js +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvMasterHostCredentialsInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-master-host-credentials-info.html'; - -/* - * Lifecycles - */ - -Template.EnvMasterHostCredentialsInfo.onCreated(function() { -}); - -/* -Template.EnvMasterHostCredentialsInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvMasterHostCredentialsInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvMasterHostCredentialsInfo.helpers({ - createInputArgs: createInputArgs -}); - - diff --git a/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.html b/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.html deleted file mode 100644 index d114ffa..0000000 --- a/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.html +++ /dev/null @@ -1,290 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.js b/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.js deleted file mode 100644 index 9e15c45..0000000 --- a/ui/imports/ui/components/env-monitoring-info/env-monitoring-info.js +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvMonitoringInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; -import { createSelectArgs } from '/imports/ui/lib/select-model'; -import { Constants } from '/imports/api/constants/constants'; - -import './env-monitoring-info.html'; - -/* - * Lifecycles - */ - -Template.EnvMonitoringInfo.onCreated(function() { - let instance = this; - - instance.autorun(function () { - instance.subscribe('constants'); - }); -}); - -/* -Template.EnvMonitoringInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvMonitoringInfo.events({ - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvMonitoringInfo.helpers({ - createInputArgs: createInputArgs, - - createSelectArgs: createSelectArgs, - - envTypeOptions: function () { - let item = Constants.findOne({ name: 'env_types' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - monitoringTypeOptions: function () { - let item = Constants.findOne({ name: 'environment_monitoring_types' }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - provisionOptions: function () { - let item = Constants.findOne({ name: 'environment_provision_types' }); - if (R.isNil(item)) { return []; } - return item.data; - }, -}); - - diff --git a/ui/imports/ui/components/env-nfv-info/env-nfv-info.html b/ui/imports/ui/components/env-nfv-info/env-nfv-info.html deleted file mode 100644 index 0d92bcd..0000000 --- a/ui/imports/ui/components/env-nfv-info/env-nfv-info.html +++ /dev/null @@ -1,128 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-nfv-info/env-nfv-info.js b/ui/imports/ui/components/env-nfv-info/env-nfv-info.js deleted file mode 100644 index 7a32ab9..0000000 --- a/ui/imports/ui/components/env-nfv-info/env-nfv-info.js +++ /dev/null @@ -1,67 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvNfvInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-nfv-info.html'; - -/* - * Lifecycles - */ - -Template.EnvNfvInfo.onCreated(function() { -}); - -/* -Template.EnvNfvInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvNfvInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvNfvInfo.helpers({ - createInputArgs: createInputArgs, - - markIfDisabled: function () { - let instance = Template.instance(); - let attrs = {}; - if (instance.data.disabled) { - attrs = R.assoc('disabled', true, attrs); - } - - return attrs; - } -}); - - diff --git a/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.html b/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.html deleted file mode 100644 index f679918..0000000 --- a/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.html +++ /dev/null @@ -1,109 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.js b/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.js deleted file mode 100644 index b8b80c0..0000000 --- a/ui/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info.js +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvOpenStackDbCredentialsInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-open-stack-db-credentials-info.html'; - -/* - * Lifecycles - */ - -Template.EnvOpenStackDbCredentialsInfo.onCreated(function() { -}); - -/* -Template.EnvOpenStackDbCredentialsInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvOpenStackDbCredentialsInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvOpenStackDbCredentialsInfo.helpers({ - createInputArgs: createInputArgs -}); - - diff --git a/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.html b/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.html deleted file mode 100644 index 26594e4..0000000 --- a/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.html +++ /dev/null @@ -1,125 +0,0 @@ - - diff --git a/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.js b/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.js deleted file mode 100644 index 0bc640b..0000000 --- a/ui/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info.js +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvOsApiEndpointInfo - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import { createInputArgs } from '/imports/ui/lib/input-model'; - -import './env-os-api-endpoint-info.html'; - -/* - * Lifecycles - */ - -Template.EnvOsApiEndpointInfo.onCreated(function() { -}); - -/* -Template.EnvOsApiEndpointInfo.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvOsApiEndpointInfo.events({ - 'click .sm-next-button': function () { - let instance = Template.instance(); - instance.data.onNextRequested(); - }, - - 'click .js-test-connection' : function (e, instance) { - instance.data.onTestConnection(); - }, -}); - -/* - * Helpers - */ - -Template.EnvOsApiEndpointInfo.helpers({ - createInputArgs: createInputArgs -}); - - diff --git a/ui/imports/ui/components/environment-box/environment-box.html b/ui/imports/ui/components/environment-box/environment-box.html deleted file mode 100644 index 36a7328..0000000 --- a/ui/imports/ui/components/environment-box/environment-box.html +++ /dev/null @@ -1,112 +0,0 @@ - diff --git a/ui/imports/ui/components/environment-box/environment-box.js b/ui/imports/ui/components/environment-box/environment-box.js deleted file mode 100644 index cbb282e..0000000 --- a/ui/imports/ui/components/environment-box/environment-box.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Template Component: EnvironmentBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './environment-box.html'; - -/* - * Lifecycles - */ - -Template.EnvironmentBox.onCreated(function() { -}); - -/* -Template.EnvironmentBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvironmentBox.events({ -}); - -/* - * Helpers - */ - -Template.EnvironmentBox.helpers({ -}); // end: helpers - - diff --git a/ui/imports/ui/components/environment-box/environment-box.styl b/ui/imports/ui/components/environment-box/environment-box.styl deleted file mode 100644 index 767735c..0000000 --- a/ui/imports/ui/components/environment-box/environment-box.styl +++ /dev/null @@ -1,18 +0,0 @@ -.os-environment-box - display: flex; - background-color: white; - padding: 30px; - box-sizing: border-box; - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - - .sm-desc-column - padding-top: 24px; - - .sm-main-icon - font-size: 54px; - color: spark-blue; - - .sm-env-summary - display: flex; - flex-flow: row wrap; - diff --git a/ui/imports/ui/components/environment-dashboard/environment-dashboard.html b/ui/imports/ui/components/environment-dashboard/environment-dashboard.html deleted file mode 100644 index 0d2c8f6..0000000 --- a/ui/imports/ui/components/environment-dashboard/environment-dashboard.html +++ /dev/null @@ -1,59 +0,0 @@ - - diff --git a/ui/imports/ui/components/environment-dashboard/environment-dashboard.js b/ui/imports/ui/components/environment-dashboard/environment-dashboard.js deleted file mode 100644 index da0d631..0000000 --- a/ui/imports/ui/components/environment-dashboard/environment-dashboard.js +++ /dev/null @@ -1,408 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: EnvironmentDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import * as _ from 'lodash'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { remove } from '/imports/api/environments/methods'; -import { Icon } from '/imports/lib/icon'; -import { store } from '/imports/ui/store/store'; -import { Environments } from '/imports/api/environments/environments'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessagesInfoBox } - from '/imports/api/messages/messages'; -import { Counts } from 'meteor/tmeasday:publish-counts'; -import { Roles } from 'meteor/alanning:roles'; -//import { idToStr } from '/imports/lib/utilities'; -import { UserSettings } from '/imports/api/user-settings/user-settings'; -import { Counter } from 'meteor/natestrauser:publish-performant-counts'; - -import '/imports/ui/components/data-cubic/data-cubic'; -import '/imports/ui/components/icon/icon'; -import '/imports/ui/components/list-info-box/list-info-box'; -import './environment-dashboard.html'; -import '/imports/ui/components/messages-info-box/messages-info-box'; -import '/imports/ui/components/messages-modal/messages-modal'; - -let briefInfoList = [{ - header: ['components', 'environment', 'briefInfos', 'instancesNum', 'header'], - dataSource: 'infoInstancesCount', - icon: new Icon({ type: 'fa', name: 'desktop' }), -}, { - header: ['components', 'environment', 'briefInfos', 'vServicesNum', 'header'], - dataSource: 'infoVServicesCount', - icon: new Icon({ type: 'fa', name: 'object-group' }), -}, { - header: ['components', 'environment', 'briefInfos', 'hostsNum', 'header'], - dataSource: 'infoHostsCount', - icon: new Icon({ type: 'fa', name: 'server' }), -}, { - header: ['components', 'environment', 'briefInfos', 'vConnectorsNum', 'header'], - dataSource: 'infoVConnectorsCount', - icon: new Icon({ type: 'fa', name: 'compress' }), -}, { - header: ['components', 'environment', 'briefInfos', 'lastScanning', 'header'], - dataSource: 'infoLastScanning', - icon: new Icon({ type: 'fa', name: 'search' }), -}]; - -let listInfoBoxes = [{ - header: ['components', 'environment', 'listInfoBoxes', 'regions', 'header'], - listName: 'regions', - listItemFormat: { - getLabelFn: (item) => { return item.name; }, - getValueFn: (item) => { return item._id._str; }, - }, - icon: { type: 'material', name: 'public' }, -}, { - header: ['components', 'environment', 'listInfoBoxes', 'projects', 'header'], - listName: 'projects', - listItemFormat: { - getLabelFn: (item) => { return item.name; }, - getValueFn: (item) => { return item._id._str; }, - }, - icon: { type: 'material', name: 'folder' }, -}]; - -/* - * Lifecycles - */ - -Template.EnvironmentDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - envName: null, - allowEdit: false, - msgsViewBackDelta: 1, - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('environments?_id', _id); - Environments.find({ _id: _id }).forEach((env) => { - instance.state.set('envName', env.name); - instance.state.set('infoLastScanning', env.last_scanned); - - let allowEdit = false; - let auth = R.path(['auth', 'edit-env'], env); - if (auth && R.contains(Meteor.userId(), auth)) { - allowEdit = true; - } - if (Roles.userIsInRole(Meteor.userId(), 'edit-env', 'default-group')) { - allowEdit = true; - } - - instance.state.set('allowEdit', allowEdit ); - - instance.subscribe('inventory?env+type', env.name, 'instance'); - instance.subscribe('inventory?env+type', env.name, 'vservice'); - instance.subscribe('inventory?env+type', env.name, 'host'); - instance.subscribe('inventory?env+type', env.name, 'vconnector'); - instance.subscribe('inventory?env+type', env.name, 'project'); - instance.subscribe('inventory?env+type', env.name, 'region'); - - /* - instance.subscribe('messages/count?level&env', 'info', env.name); - instance.subscribe('messages/count?level&env', 'warning', env.name); - instance.subscribe('messages/count?level&env', 'error', env.name); - */ - - let vConnectorCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'vconnector'; - let infoVConnectorsCount = Counts.get(vConnectorCounterName); - instance.state.set('infoVConnectorsCount', infoVConnectorsCount); - - let hostsCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'host'; - let infoHostsCount = Counts.get(hostsCounterName); - instance.state.set('infoHostsCount', infoHostsCount); - - let vServicesCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'vservice'; - let infoVServicesCount = Counts.get(vServicesCounterName); - instance.state.set('infoVServicesCount', infoVServicesCount); - - let instancesCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'instance'; - let infoInstancesCount = Counts.get(instancesCounterName); - instance.state.set('infoInstancesCount', infoInstancesCount); - - let projectsCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'project'; - let projectsCount = Counts.get(projectsCounterName); - instance.state.set('projectsCount', projectsCount); - - let regionsCounterName = 'inventory?env+type!counter?env=' + - env.name + '&type=' + 'region'; - let regionsCount = Counts.get(regionsCounterName); - instance.state.set('regionsCount', regionsCount); - }); - - }); - - instance.autorun(function () { - instance.subscribe('user_settings?user'); - UserSettings.find({user_id: Meteor.userId()}).forEach((userSettings) => { - instance.state.set('msgsViewBackDelta', userSettings.messages_view_backward_delta); - }); - }); - - instance.autorun(function () { - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - let env = instance.state.get('envName'); - - instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'info', env); - instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'warning', env); - instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'error', env); - }); -}); - -/* -Template.EnvironmentDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.EnvironmentDashboard.events({ - 'click .sm-edit-button': function (event, instance) { - let envName = instance.state.get('envName'); - let allowEdit = instance.state.get('allowEdit'); - if (! allowEdit) { return; } - - Router.go('/wizard/' + envName,{},{}); - }, - - 'click .sm-scan-button': function (event, instance) { - let envName = instance.state.get('envName'); - - Router.go('new-scanning',{},{ query: { env: envName } }); - }, - - 'click .sm-delete-button': function (event, instance) { - let allowEdit = instance.state.get('allowEdit'); - if (! allowEdit) { return; } - - let $deleteModal = instance.$('#env-delete-modal'); - $deleteModal.modal({ show: true }); - } -}); - -/* - * Helpers - */ - -Template.EnvironmentDashboard.helpers({ - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - getListInfoBoxes: function () { - return listInfoBoxes; - }, - - getBriefInfoList: function () { - return briefInfoList; - }, - - infoMessagesCount: function(){ - let instance = Template.instance(); - let envName = instance.state.get('envName'); - if (R.isNil(envName)) { return; } - - return Counts.get('messages?env+level!counter?env=' + - envName + '&level=' + 'info'); - }, - - warningsCount: function(){ - let instance = Template.instance(); - let envName = instance.state.get('envName'); - if (R.isNil(envName)) { return; } - - return Counts.get('messages?env+level!counter?env=' + - envName + '&level=' + 'warn'); - }, - - errorsCount: function(){ - let instance = Template.instance(); - let envName = instance.state.get('envName'); - if (R.isNil(envName)) { return; } - - return Counts.get('messages?env+level!counter?env=' + - envName + '&level=' + 'error'); - }, - - argsEnvDeleteModal: function () { - let instance = Template.instance(); - return { - onDeleteReq: function () { - instance.$('#env-delete-modal').modal('hide'); - let _id = instance.state.get('_id'); - remove.call({ _id: _id }, function (error, _res) { - if (R.isNil(error)) { - setTimeout(() => { - Router.go('/dashboard'); - }, 700); - } else { - alert('error removing environment. ' + error.message); - } - }); - console.log('delete req performed'); - } - }; - }, - - argsBriefInfo: function (briefInfo) { - let instance = Template.instance(); - return { - header: R.path(briefInfo.header, store.getState().api.i18n), - dataInfo: R.toString(instance.state.get(briefInfo.dataSource)), - icon: new Icon(briefInfo.icon) - }; - }, - - argsListInfoBox: function (listInfoBox) { - let instance = Template.instance(); - let data = Template.currentData(); - let envName = instance.state.get('envName'); - - //let lastScanned = calcLastScanned(listInfoBox.listName, envName); - - return { - header: R.path(listInfoBox.header, store.getState().api.i18n), - list: getList(listInfoBox.listName, envName), - icon: new Icon(listInfoBox.icon), - listItemFormat: listInfoBox.listItemFormat, - //lastScanning: lastScanned, - onItemSelected: function (itemKey) { - data.onNodeSelected(new Mongo.ObjectID(itemKey)); - } - }; - }, - - notAllowEdit: function () { - let instance = Template.instance(); - let allowEdit = instance.state.get('allowEdit'); - return ! allowEdit; - }, - - getListMessagesInfoBox: function () { - return [ - { - level: 'info' - }, - { - level: 'warning' - }, - { - level: 'error' - }, - ]; - }, - - argsMessagesInfoBox: function(boxDef, env) { - let instance = Template.instance(); - let envName = instance.state.get('envName'); - let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); - - if (R.isNil(envName)) { - return { - title: '', count: 0, lastScanTimestamp: '', onMoreDetailsReq: function () {} - }; - } - - //let counterName = `messages/count?level=${boxDef.level}&env=${envName}`; - let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${boxDef.level}&env=${envName}`; - let count = Counter.get(counterName); - - //let count = Counts.get('messages?env+level!counter?env=' + - // envName + '&level=' + boxDef.level); - - let title = _.capitalize(boxDef.level); - - return { - title: title, - count: count, - lastScanTimestamp: lastMessageTimestamp(boxDef.level, env), - icon: calcIconForMessageLevel(boxDef.level), - colorClass: calcColorClassForMessagesInfoBox(boxDef.level), - onMoreDetailsReq: function () { - $('#messagesModalGlobal').modal('show', { - dataset: { - messageLevel: boxDef.level, - envName: env, - } - }); - } - }; - }, -}); // end: helpers - -function getList(listName, envName) { - switch (listName) { - case 'regions': - return Inventory.find({ - environment: envName, - type: 'region' - }); - - case 'projects': - return Inventory.find({ - environment: envName, - type: 'project' - }); - - default: - throw 'unknowned list type'; - } -} - -/* -function calcLastScanned(listName, envName) { - switch (listName) { - case 'regions': - return R.path(['last_scanned'], Inventory.findOne({ - environment: envName, - type:'region' - })); - - case 'projects': - return R.path(['last_scanned'], Inventory.findOne({ - environment: envName, - type:'project' - })); - - default: - throw 'unknown'; - } -} -*/ diff --git a/ui/imports/ui/components/environment-dashboard/environment-dashboard.styl b/ui/imports/ui/components/environment-dashboard/environment-dashboard.styl deleted file mode 100644 index f27c19d..0000000 --- a/ui/imports/ui/components/environment-dashboard/environment-dashboard.styl +++ /dev/null @@ -1,12 +0,0 @@ -.os-environment-dashboard - .cl-action-button.cl-action-disabled - color: lightgray - - .sm-messages-section - display: flex; - flex-flow: row wrap; - justify-content: center; - - .sm-message-box - flex: 1; - padding: 0 15px; diff --git a/ui/imports/ui/components/environment-wizard/environment-wizard.html b/ui/imports/ui/components/environment-wizard/environment-wizard.html deleted file mode 100644 index 4898a5a..0000000 --- a/ui/imports/ui/components/environment-wizard/environment-wizard.html +++ /dev/null @@ -1,83 +0,0 @@ - - diff --git a/ui/imports/ui/components/environment-wizard/environment-wizard.js b/ui/imports/ui/components/environment-wizard/environment-wizard.js deleted file mode 100644 index bc6cc55..0000000 --- a/ui/imports/ui/components/environment-wizard/environment-wizard.js +++ /dev/null @@ -1,568 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - */ - -//import { Meteor } from 'meteor/meteor'; -import { Session } from 'meteor/session'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { ConnectionTests } from '/imports/api/connection-tests/connection-tests'; - -import { Environments } from '/imports/api/environments/environments'; -import { subsNameSupportedEnvs, - isMonitoringSupported, - isListeningSupported, -} from '/imports/api/supported_environments/supported_environments'; -import { createNewConfGroup } from '/imports/api/environments/environments'; -import { store } from '/imports/ui/store/store'; - -import './environment-wizard.html'; - -import '/imports/ui/components/env-main-info/env-main-info'; -import '/imports/ui/components/env-os-api-endpoint-info/env-os-api-endpoint-info'; -import '/imports/ui/components/env-open-stack-db-credentials-info/env-open-stack-db-credentials-info'; -import '/imports/ui/components/env-master-host-credentials-info/env-master-host-credentials-info'; -//import '/imports/ui/components/env-nfv-info/env-nfv-info'; -import '/imports/ui/components/env-aci-info/env-aci-info'; -import '/imports/ui/components/env-amqp-credentials-info/env-amqp-credentials-info'; -import '/imports/ui/components/env-monitoring-info/env-monitoring-info'; - -import { - insert, - update -} from '/imports/api/environments/methods'; - -import { insert as insertConnectionTests } from '/imports/api/connection-tests/methods'; - -/* - * Lifecycles - */ - -Template.EnvironmentWizard.onCreated(function(){ - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - environment: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - connectionTestId: null - }); - - instance.autorun(function () { - let controller = Iron.controller(); - controller.state.set('needsConfirmation', true); - Session.set('isDirty', false); - //let params = controller.getParams(); - - //let envName = params.env; - let envName = Session.get('wizardEnv'); - if (envName) { - instance.subscribe('environments?name', envName); - instance.state.set('action', 'update'); - - } else { - instance.state.set('action', 'insert'); - } - - instance.subscribe(subsNameSupportedEnvs); - - let action = instance.state.get('action'); - if (action === 'update') { - Environments.find({'name': envName}) - .forEach(function (envItem) { - instance.state.set('environmentModel', R.clone(envItem)); - }); - } else if (action === 'insert') { - instance.state.set('environmentModel', generateNewEnv()); - } - }); - - instance.autorun(function () { - let connectionTestId = instance.state.get('connectionTestId'); - if (R.isNil(connectionTestId)) { return; } - - instance.subscribe('connection_tests?_id', connectionTestId); - ConnectionTests.find({ _id: connectionTestId }).forEach((connTest) => { - if (connTest.status !== 'response') { - return; - } - - R.mapObjIndexed((success, groupName) => { - if (success) { - toastr.success(`${groupName} connection is OK`, { timeOut: 5000 }); - } else { - toastr.error(`${groupName} connection is DOWN`, { timeOut: 5000 }); - } - }, connTest.test_results); - }); - }); - - instance.storeUnsubscribe = store.subscribe(() => { - let i18n = store.getState().api.i18n; - instance.state.set('i18n', i18n); - }); - - - let i18n = store.getState().api.i18n; - instance.state.set('i18n', i18n); -}); - -Template.EnvironmentWizard.rendered = function(){ - - // todo: refactor to use component - not jquery click - $('.btnPrevious').click(function(){ - $('.nav-tabs > .active').prev('li').find('a').trigger('click'); - }); - -}; - -Template.EnvironmentWizard.onDestroyed(function () { - let instance = this; - instance.storeUnsubscribe(); -}); - -/* - * Helpers - */ - -Template.EnvironmentWizard.helpers({ - model: function () { - let instance = Template.instance(); - let environmentModel = instance.state.get('environmentModel'); - return environmentModel; - }, - - tabs: function () { - let instance = Template.instance(); - - let environmentModel = instance.state.get('environmentModel'); - let action = instance.state.get('action'); - let disabled = instance.state.get('disabled'); - let activateNextTab = function (nextTabId) { - instance.$('#link-' + nextTabId).tab('show'); - }; - - if (R.isNil(environmentModel)) { - return []; - } - - let isMonSupportedRes = isMonitoringSupported( - environmentModel.distribution, - environmentModel.distribution_version, - environmentModel.type_drivers, - environmentModel.mechanism_drivers - ); - - let isMonitoringDisabled = disabled || !isMonSupportedRes; - - - let monitoringDisabledMessage = null; - if (isMonitoringDisabled && !isMonSupportedRes) { - monitoringDisabledMessage = 'Distribution, type drivers and mechanism driver are not supported at this moment'; - } - - let isListeningSupportedRes = isListeningSupported( - environmentModel.distribution, - environmentModel.distribution_version, - environmentModel.type_drivers, - environmentModel.mechanism_drivers - ); - let isListeningDisabled = disabled || !isListeningSupportedRes; - - let amqpTabDisabled = !(environmentModel.listen && isListeningSupportedRes); - let monitoringTabDisabled = !(environmentModel.enable_monitoring && isMonSupportedRes); - let isAciTabDisabled = !(environmentModel.aci_enabled); - - return [{ - label: 'Main Info', - localLink: 'maininfo', - defaultTab: true, - disabled: false, - templateName: 'EnvMainInfo', - templateData: { - model: environmentModel, - disabled: disabled, - isListeningDisabled: isListeningDisabled, - isMonitoringDisabled: isMonitoringDisabled, - setModel: function (newModel) { - Session.set('isDirty', true); - - if (newModel.aci_enabled) { - let monitoringGroup = getGroupInArray('Monitoring', newModel.configuration); - newModel = setConfigurationGroup('Monitoring', monitoringGroup, newModel); - } else { - newModel = removeConfigurationGroup('Monitoring', newModel); - } - - if (newModel.enable_monitoring) { - let monitoringGroup = getGroupInArray('ACI', newModel.configuration); - newModel = setConfigurationGroup('ACI', monitoringGroup, newModel); - } else { - newModel = removeConfigurationGroup('ACI', newModel); - } - - if (newModel.listen) { - let monitoringGroup = getGroupInArray('AMQP', newModel.configuration); - newModel = setConfigurationGroup('AMQP', monitoringGroup, newModel); - } else { - newModel = removeConfigurationGroup('AMQP', newModel); - } - - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'endpoint-panel'), - action: action, - } - }, { - label: 'OS API Endpoint', - localLink: 'endpoint-panel', - disabled: false, - templateName: 'EnvOsApiEndpointInfo', - templateData: { - model: getGroupInArray('OpenStack', environmentModel.configuration), - disabled: disabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('OpenStack', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'db-credentials'), - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }, { - label: 'OS DB Credentials', - localLink: 'db-credentials', - disabled: false, - templateName: 'EnvOpenStackDbCredentialsInfo', - templateData: { - model: getGroupInArray('mysql', environmentModel.configuration), - disabled: disabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('mysql', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'master-host'), - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }, { - label: 'Master Host Credentials', - localLink: 'master-host', - disabled: false, - templateName: 'EnvMasterHostCredentialsInfo', - templateData: { - model: getGroupInArray('CLI', environmentModel.configuration), - disabled: disabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('CLI', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'amqp'), - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }, { - label: 'AMQP Credentials', - localLink: 'amqp', - disabled: amqpTabDisabled, - templateName: 'EnvAmqpCredentialsInfo', - templateData: { - model: getGroupInArray('AMQP', environmentModel.configuration), - disabled: disabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('AMQP', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'aci'), - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }, - /* { - label: 'NFV Credentials', - localLink: 'nfv', - disabled: false, - templateName: 'EnvNfvInfo', - templateData: { - model: getGroupInArray('NFV_provider', environmentModel.configuration), - disabled: disabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('NFV_provider', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'monitoringInfo'), - action: action, - } - }, */ - { - label: 'ACI Credentials', - localLink: 'aci', - disabled: isAciTabDisabled, - templateName: 'EnvAciInfo', - templateData: { - model: getGroupInArray('ACI', environmentModel.configuration), - disabled: isAciTabDisabled, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('ACI', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - onNextRequested: activateNextTab.bind(null, 'monitoringInfo'), - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }, { - label: 'Monitoring', - localLink: 'monitoringInfo', - disabled: monitoringTabDisabled, - templateName: 'EnvMonitoringInfo', - templateData: { - model: getGroupInArray('Monitoring', environmentModel.configuration), - disabled: isMonitoringDisabled, - disabledMessage: monitoringDisabledMessage, - setModel: function (newSubModel) { - Session.set('isDirty', true); - let model = instance.state.get('environmentModel'); - let newModel = setConfigurationGroup('Monitoring', newSubModel, model); - instance.state.set('environmentModel', newModel); - }, - action: action, - onTestConnection: function () { - testConnection(instance); - }, - } - }]; - }, - - isDefaultTab: function (tab) { - return tab.defaultTab; - }, - - environment: function () { - let instance = Template.instance(); - return instance.state.get('environment'); - }, - - getConfSection: function(sectionName, environment) { - if (R.isNil(environment)) { return null; } - let section = R.find(R.propEq('name', sectionName), - environment.configuration); - return section; - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, -}); - -/* - * Events - */ - -Template.EnvironmentWizard.events({ - /* - 'click .toast' : function () { - toastr.success('Have fun storming the castle!', 'Open Stack server says'); - }, - */ - - // todo: research: seems not implemented - /* - 'click .fa-trash' : function () { - Meteor.call('deleteRecipe', this._id); - }, - */ - - 'click .sm-submit-button': function () { - let instance = Template.instance(); - doSubmit(instance); - }, - - 'click .sm-tab-link': function (event, _instance) { - let isDisabled = event.target.dataset.isDisabled; - if (isDisabled) { - event.preventDefault(); - event.stopPropagation(); - return; - } - }, -}); - -function generateNewEnv() { - return Environments.schema.clean({}); -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - let message = error.message; - if (error.errors) { - message = R.reduce((acc, errorItem) => { - return acc + '\n- ' + errorItem.name; - }, message, error.errors); - } - instance.state.set('message', message); - } - - } else { - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - if (action === 'insert') { - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - } else if (action === 'update') { - instance.state.set('message', 'Record had been updated successfully'); - } - - Session.set('isDirty', false); - } -} - -function processInsertTestConnnectionResult(instance, error, itemId) { - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - let message = error.message; - if (error.errors) { - message = R.reduce((acc, errorItem) => { - return acc + '\n- ' + errorItem.name; - }, message, error.errors); - } - instance.state.set('message', message); - } - - return; - } - - instance.state.set('connectionTestId', itemId); - - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - instance.state.set('message', 'Connection send to be tested'); -} - -function getGroupInArray(groupName, array) { - let group = R.find(R.propEq('name', groupName), array); - return group ? group : createNewConfGroup(groupName); -} - -function removeGroupInArray(groupName, array) { - return R.reject(R.propEq('name', groupName), array); -} - -function setConfigurationGroup(groupName, group, model) { - let tempConfiguration = removeGroupInArray(groupName, model.configuration); - let newConfiguration = R.append(group, tempConfiguration); - let newModel = R.assoc('configuration', newConfiguration, model); - return newModel; -} - -function removeConfigurationGroup(groupName, model) { - let newConfiguration = removeGroupInArray(groupName, model.configuration); - let newModel = R.assoc('configuration', newConfiguration, model); - return newModel; -} - -function doSubmit(instance) { - let action = instance.state.get('action'); - let environment = instance.state.get( - 'environmentModel'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - configuration: environment.configuration, - distribution: environment.distribution, - distribution_version: environment.distribution_version, - name: environment.name, - type_drivers: environment.type_drivers, - mechanism_drivers: environment.mechanism_drivers, - listen: environment.listen, - enable_monitoring: environment.enable_monitoring, - aci_enabled: environment.aci_enabled, - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: environment._id, - configuration: environment.configuration, - //distribution: environment.distribution, - //name: environment.name, - type_drivers: environment.type_drivers, - mechanism_drivers: environment.mechanism_drivers, - listen: environment.listen, - enable_monitoring: environment.enable_monitoring, - aci_enabled: environment.aci_enabled, - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function testConnection(instance) { - let environmentModel = instance.state.get('environmentModel'); - insertConnectionTests.call({ - environment: environmentModel.name, - test_configurations: environmentModel.configuration, - }, processInsertTestConnnectionResult.bind(null, instance)); -} diff --git a/ui/imports/ui/components/environment-wizard/environment-wizard.styl b/ui/imports/ui/components/environment-wizard/environment-wizard.styl deleted file mode 100644 index ec11e43..0000000 --- a/ui/imports/ui/components/environment-wizard/environment-wizard.styl +++ /dev/null @@ -1,27 +0,0 @@ -.sm-environment-wizard-container - display: flex; - flex-flow: row nowrap; - - .site-sidenav - p - font-size: 0.8em; - i - color: white; - - .menu-header - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - - padding: 10px; - color: white; - font-size: 1.7em; - - .sm-environment-form - .sm-main-layout-no-nav - margin: 20px; - - .js-message-panel - margin: 20px 40px; - margin-bottom: 0px; - white-space: pre-line; diff --git a/ui/imports/ui/components/environment/environment.html b/ui/imports/ui/components/environment/environment.html deleted file mode 100644 index e12921b..0000000 --- a/ui/imports/ui/components/environment/environment.html +++ /dev/null @@ -1,70 +0,0 @@ - - diff --git a/ui/imports/ui/components/environment/environment.js b/ui/imports/ui/components/environment/environment.js deleted file mode 100644 index 9df6046..0000000 --- a/ui/imports/ui/components/environment/environment.js +++ /dev/null @@ -1,604 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Tempalte Component: Environment - */ - -/* - * Lifecycles methods - */ - -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { EJSON } from 'meteor/ejson'; -import factory from 'reactive-redux'; -import { _idFieldDef } from '/imports/lib/simple-schema-utils'; -//import { idToStr } from '/imports/lib/utilities'; - -import { Environments } from '/imports/api/environments/environments'; -import { Inventory } from '/imports/api/inventories/inventories'; -//import { Messages } from '/imports/api/messages/messages'; - -import { store } from '/imports/ui/store/store'; -//import { setCurrentNode } from '/imports/ui/actions/navigation'; -import { - setEnvEnvId, - setEnvName, - updateEnvTreeNode, - startOpenEnvTreeNode, - setEnvSelectedNodeInfo, - setEnvAsLoaded, - setEnvAsNotLoaded, - setEnvSelectedNodeAsEnv, - toggleEnvShow, - endOpenEnvTreeNode, - reportEnvNodePositionRetrieved, - setEnvScrollToNodeIsNeededAsOn, - reportEnvScrollToNodePerformed, - resetEnvNeedChildDetection, - setShowDashboard, -// setShowGraph, -} from '/imports/ui/actions/environment-panel.actions'; -import { setMainAppSelectedEnvironment } from '/imports/ui/actions/main-app.actions'; -import { closeVedgeInfoWindow } from '/imports/ui/actions/vedge-info-window.actions'; -import { setEnvSelectedNode } - from '/imports/ui/actions/environment-panel.actions'; - -import '/imports/ui/components/accordion-nav-menu/accordion-nav-menu'; -import '/imports/ui/components/graph-tooltip-window/graph-tooltip-window'; -import '/imports/ui/components/vedge-info-window/vedge-info-window'; -import '/imports/ui/components/env-delete-modal/env-delete-modal'; -import '/imports/ui/components/environment-dashboard/environment-dashboard'; -import '/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard'; -import '/imports/ui/components/general-node-dashboard/general-node-dashboard'; -import '/imports/ui/components/network-graph-manager/network-graph-manager'; - -import './environment.html'; - -let maxOpenTreeNodeTrialCount = 3; - -/* -var nodeTypesForSelection = [ - 'project', - 'availability_zone', - 'host', - 'environment', - 'aggregate', - 'host', - 'region', - 'instance', - 'network' -]; -*/ - -/* - * Lifecycles - */ - -Template.Environment.onCreated(function () { - var instance = this; - - instance.collapsedSideMenu = false; - - // reactive state - instance.state = new ReactiveDict(); - instance.state.setDefault({ - graphTooltipWindow: { label: '', title: '', left: 0, top: 0, show: false }, - vedgeInfoWindow: { node: null, left: 0, top: 0, show: false }, - dashboardName: 'environment', - collapsedSideMenu: instance.collapsedSideMenu, - isLoading: false, - }); - - instance.currentData = new ReactiveVar(null, EJSON.equals); - instance.onNodeOpeningDone = _.debounce(() => { - scrollTreeToLastOpenedChild(instance); - }, 400); - - createAttachedFns(instance); - - const envIdSelector = (state) => (state.components.environmentPanel._id); - instance.rdxEnvId = factory(envIdSelector, store); - - const mainNodeSelector = (state) => (state.components.environmentPanel.treeNode); - instance.rdxMainNode = factory(mainNodeSelector, store); - - const selectedNodeIdSelector = - (state) => (state.components.environmentPanel.selectedNode._id); - instance.rdxSelectedNodeId = factory(selectedNodeIdSelector, store); - - const selectedNodeTypeSelector = - (state) => (state.components.environmentPanel.selectedNode.type); - instance.rdxSelectedNodeType = factory(selectedNodeTypeSelector, store); - - const envNameSelector = (state) => (state.components.environmentPanel.envName); - instance.rdxEnvName = factory(envNameSelector, store); - - const isLoadedSelector = (state) => (state.components.environmentPanel.isLoaded); - instance.rdxIsLoaded = factory(isLoadedSelector, store); - - const showTypeSelector = (state) => (state.components.environmentPanel.showType); - instance.rdxShowType = factory(showTypeSelector, store); - - const selectedNodeCliqueSelector = - (state) => (state.components.environmentPanel.selectedNode.clique); - instance.rdxSelectedNodeClique = factory(selectedNodeCliqueSelector, store); - - const selectedNodeIdPathSelector = - (state) => (state.components.environmentPanel.selectedNode.id_path); - instance.rdxSelectedNodeIdPath = factory(selectedNodeIdPathSelector, store); - - const i18nSelector = (state) => (state.api.i18n); - instance.rdxI18n = factory(i18nSelector, store); - - instance.autorun((function(_this) { - return function(_computation) { - return _this.currentData.set(Template.currentData()); - }; - })(instance)); - - let lastData = null; - - // Autorun component input - instance.autorun(function () { - let data = instance.currentData.get(); - - if (R.equals(data, lastData)) { return; } - lastData = data; - - new SimpleSchema({ - _id: _idFieldDef, - selectedNodeId: R.assoc('optional', true, _idFieldDef), - refresh: { type: String, optional: true }, - }).validate(data); - - store.dispatch(setEnvEnvId(data._id)); - if (R.isNil(data.selectedNodeId)) { - store.dispatch(setEnvSelectedNodeAsEnv()); - } else { - store.dispatch(setEnvSelectedNode(data.selectedNodeId)); - } - }); - - // Autorun object id - instance.autorun(function () { - let _id = instance.rdxEnvId.get(); - store.dispatch(setEnvAsNotLoaded()); - - instance.subscribe('environments?_id', _id); - Environments.find({ _id: _id }).forEach((env) => { - store.dispatch(setEnvName(env.name)); - store.dispatch(updateEnvTreeNode(env)); - store.dispatch(setEnvAsLoaded()); - store.dispatch(startOpenEnvTreeNode([])); - store.dispatch(setMainAppSelectedEnvironment(env._id)); - store.dispatch(setShowDashboard()); - }); - }); - - // Autorun selected node - instance.autorun(function () { - let selectedNodeId = instance.rdxSelectedNodeId.get(); - //let selectedNodeType = instance.rdxSelectedNodeType.get(); - - if (R.isNil(selectedNodeId)) { return; } - //if (selectedNodeType === 'environment') { return; } - - instance.subscribe('inventory?_id', selectedNodeId); - Inventory.find({ _id: selectedNodeId }).forEach((selectedNode) => { - store.dispatch(setEnvSelectedNodeInfo(selectedNode)); - - Meteor.apply('expandNodePath', - [ selectedNode._id ], - { wait: false }, - function (err, res) { - if (err) { - console.error(err); - return; - } - - if (R.isNil(res)) { return; } - - let idList = R.map(R.path(['_id', '_str']), res); - openTreeNode([R.head(idList)], R.tail(idList), 0); - }); - }); - }); - - ///////////////// - - instance.storeUnsubscribe = store.subscribe(() => { - let state = store.getState(); - - let graphTooltipWindow = state.components.graphTooltipWindow; - instance.state.set('graphTooltipWindow', graphTooltipWindow); - - let vedgeInfoWindow = state.components.vedgeInfoWindow; - instance.state.set('vedgeInfoWindow', vedgeInfoWindow); - - }); - - /* - (() => { - if (R.isNil(controller.params.query.selectedNodeId) && - R.isNil(selectedNodeId)) { - return; - } - - let srlSelectedNodeId = idToStr(selectedNodeId); - if (R.equals(controller.params.query.selectedNodeId, srlSelectedNodeId)) { - return; - } - - setTimeout(() => { - Router.go('environment', - { _id: controller.params._id }, - { query: { selectedNodeId: srlSelectedNodeId } }); - }, 1); - - })(); - */ - - let prevIdPath = null; - instance.autorun(function () { - let idPath = instance.rdxSelectedNodeIdPath.get(); - if (prevIdPath !== idPath) { - prevIdPath = idPath; - instance.state.set('isLoading', true); - } - }); - - instance.autorun(function () { - let isLoading = instance.state.get('isLoading'); - if (isLoading) { - setTimeout(() => { - instance.state.set('isLoading', false); - }, 200); - } - }); -}); - -Template.Environment.onDestroyed(function () { - let instance = this; - instance.storeUnsubscribe(); - instance.rdxMainNode.cancel(); - instance.rdxEnvId.cancel(); - instance.rdxSelectedNodeId.cancel(); - instance.rdxEnvName.cancel(); - instance.rdxIsLoaded.cancel(); - instance.rdxShowType.cancel(); - instance.rdxSelectedNodeIdPath.cancel(); -}); - -Template.Environment.rendered = function(){ -}; - -/* - * Helpers - */ - -Template.Environment.helpers({ - isLoaded: function () { - let instance = Template.instance(); - return instance.rdxIsLoaded.get(); - }, - - envName: function(){ - let instance = Template.instance(); - return instance.rdxEnvName.get(); - }, - - mainNode: function () { - let instance = Template.instance(); - return instance.rdxMainNode.get(); - }, - - selectedNodeType: function () { - let instance = Template.instance(); - return instance.rdxSelectedNodeType.get(); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - isLoading: function () { - let instance = Template.instance(); - return instance.state.get('isLoading'); - }, - - argsNavMenu: function (envName, mainNode) { - let instance = Template.instance(); - return { - envName: envName, - mainNode: mainNode, - onOpeningDone: instance._fns.onOpeningDone, - onNodeSelected: instance._fns.onNodeSelected, - onToggleGraphReq: function () { - store.dispatch(toggleEnvShow()); - }, - onResetSelectedNodeReq: function () { - store.dispatch(setEnvSelectedNodeAsEnv()); - }, - onPositionRetrieved: instance._fns.onPositionRetrieved, - onScrollToNodePerformed: instance._fns.onScrollToNodePerformed, - onOpenLinkReq: instance._fns.onOpenLinkReq, - onResetNeedChildDetection: instance._fns.onResetNeedChildDetection, - onToggleMenu: function () { - instance.collapsedSideMenu = !instance.collapsedSideMenu; - instance.state.set('collapsedSideMenu', - instance.collapsedSideMenu); - }, - showCollapsed: instance.state.get('collapsedSideMenu'), - }; - }, - - graphTooltipWindow: function () { - let instance = Template.instance(); - let graphTooltipWindow = instance.state.get('graphTooltipWindow'); - - return graphTooltipWindow; - }, - - vedgeInfoWindow: function () { - let instance = Template.instance(); - let vedgeInfoWindow = instance.state.get('vedgeInfoWindow'); - - return vedgeInfoWindow; - }, - - argsGraphTooltipWindow: function (graphTooltipWindow) { - return { - label: R.path(['label'], graphTooltipWindow), - title: R.path(['title'], graphTooltipWindow), - left: R.path(['left'], graphTooltipWindow), - top: R.path(['top'], graphTooltipWindow), - show: R.path(['show'], graphTooltipWindow) - }; - }, - - argsVedgeInfoWindow: function (vedgeInfoWindow) { - return { - environment: R.path(['node', 'environment'], vedgeInfoWindow), - object_id: R.path(['node', 'id'], vedgeInfoWindow), - name: R.path(['node', 'name'], vedgeInfoWindow), - left: R.path(['left'], vedgeInfoWindow), - top: R.path(['top'], vedgeInfoWindow), - show: R.path(['show'], vedgeInfoWindow), - onCloseRequested: function () { - store.dispatch(closeVedgeInfoWindow()); - } - }; - }, - - argsD3Graph: function () { - let instance = Template.instance(); - let idPath = instance.rdxSelectedNodeIdPath.get(); - - return { - id_path: idPath - }; - }, - - argsNetworkGraphManager: function () { - let instance = Template.instance(); - let idPath = instance.rdxSelectedNodeIdPath.get(); - - return { - id_path: idPath - }; - }, - - showVedgeInfoWindow: function () { - let instance = Template.instance(); - let node = instance.state.get('vedgeInfoWindow').node; - return ! R.isNil(node); - }, - - isSelectedNodeAGraph: function () { - let instance = Template.instance(); - let nodeClique = instance.rdxSelectedNodeClique.get(); - - return !R.isNil(nodeClique); - }, - - dashboardTemplate: function () { - let instance = Template.instance(); - let selectedNodeType = instance.rdxSelectedNodeType.get(); - let dashTemplate = 'EnvironmentDashboard'; - - switch (selectedNodeType) { - case 'project': - dashTemplate = 'ProjectDashboard'; - break; - - case 'region': - dashTemplate = 'RegionDashboard'; - break; - - case 'aggregate': - dashTemplate = 'AggregateDashboard'; - break; - - case 'host': - dashTemplate = 'HostDashboard'; - break; - - case 'availability_zone': - dashTemplate = 'ZoneDashboard'; - break; - - case 'environment': - dashTemplate = 'EnvironmentDashboard'; - break; - - case 'vservice_routers_folder': - case 'vnics_folder': - case 'regions_folder': - case 'vedges_folder': - case 'network_agents_folder': - case 'network_services_folder': - case 'availability_zones_folder': - case 'pnics_folder': - case 'networks_folder': - case 'vconnectors_folder': - case 'projects_folder': - case 'aggregates_folder': - case 'vservices_folder': - case 'vservice_dhcps_folder': - case 'ports_folder': - case 'instances_folder': - dashTemplate = 'GeneralFolderNodeDashboard'; - break; - - default: - dashTemplate = 'GeneralNodeDashboard'; - } - - return dashTemplate; - }, - - rdxSelectedNodeId: function () { - let instance = Template.instance(); - return instance.rdxSelectedNodeId.get(); - }, - - argsDashboard: function (nodeId) { - //let instance = Template.instance(); - - return { - _id: nodeId, - onNodeSelected: function (selectedNodeId) { - store.dispatch(setEnvSelectedNode(selectedNodeId, null)); - } - }; - }, - - argsBreadCrumb: function (selectedNodeId) { - return { - nodeId: selectedNodeId, - onNodeSelected: function (node) { - store.dispatch(setEnvSelectedNode(node._id, null)); - } - }; - }, - - getShow: function (qShowType) { - let instance = Template.instance(); - let showType = instance.rdxShowType.get(); - - return R.equals(showType, qShowType); - }, - - i18n: function () { - let instance = Template.instance(); - return instance.rdxI18n.get(); - - }, -}); // end: helpers - - -Template.Environment.events({ -}); - -function openTreeNode(path, rest, trialCount) { - if (trialCount > maxOpenTreeNodeTrialCount) { - return; - } - - let tree = store.getState().components.environmentPanel - .treeNode; - - let node = getNodeInTree(path, tree); - if (R.isNil(node)) { - setTimeout(() => { - openTreeNode(path, rest, trialCount + 1); - }, 800); - return; - } - - if (node.openState === 'closed') { - store.dispatch(startOpenEnvTreeNode(path)); - setTimeout(() => { - openTreeNode(path, rest, trialCount + 1); - }, 200); - return; - } - - if (R.length(rest) === 0) { return; } - - let newPath = R.append(R.head(rest), path); - let newRest = R.drop(1, rest); - openTreeNode(newPath, newRest, 0); -} - -function getNodeInTree(path, tree) { - if (R.length(path) === 0) { return tree; } - - let first = R.head(path); - let rest = R.tail(path); - let child = R.find(R.pathEq(['nodeInfo', '_id', '_str'], first), - tree.children); - - if (R.isNil(child)) { return null; } - - return getNodeInTree(rest, child); -} - -function createAttachedFns(instance) { - instance._fns = { - onOpeningDone: (nodePath, _nodeInfo) => { - store.dispatch(endOpenEnvTreeNode(R.tail(nodePath))); - instance.lastOpenedNodePath = nodePath; - instance.onNodeOpeningDone(); - }, - - onNodeSelected: (nodeInfo) => { - //if (R.contains(nodeInfo.type, nodeTypesForSelection)) { - store.dispatch(setEnvSelectedNode(nodeInfo._id, null)); - //} - }, - - onPositionRetrieved: (nodePath, rect) => { - store.dispatch( - reportEnvNodePositionRetrieved(R.tail(nodePath), rect)); - }, - - onScrollToNodePerformed: (nodePath) => { - store.dispatch(reportEnvScrollToNodePerformed(R.tail(nodePath))); - }, - - onOpenLinkReq: (envName, nodeName) => { - Meteor.apply('inventoryFindNode?type&env&name', [ - 'host', envName, nodeName - ], { - wait: false - }, function (err, res) { - if (err) { - console.log('error in inventoryFindNode', err); - return; - } - - store.dispatch(setEnvSelectedNode(res.node._id, null)); - }); - }, - - onResetNeedChildDetection: (nodePath) => { - store.dispatch(resetEnvNeedChildDetection(R.tail(nodePath))); - } - }; -} - -function scrollTreeToLastOpenedChild(instance) { - store.dispatch(setEnvScrollToNodeIsNeededAsOn(R.tail(instance.lastOpenedNodePath))); -} diff --git a/ui/imports/ui/components/environment/environment.styl b/ui/imports/ui/components/environment/environment.styl deleted file mode 100644 index dc27015..0000000 --- a/ui/imports/ui/components/environment/environment.styl +++ /dev/null @@ -1,70 +0,0 @@ -.sm-environment-container - - .sm-site-sidenav - transition: 0.5s width; - min-width: initial; - max-width: initial; - - &.collapsed - width: 30px; - overflow: hidden; - - .sm-node-no-graph-data-msg - display: flex; - flex-flow: column nowrap; - align-items: center; - font-size: large; - - .sm-env-header-line - display: flex - flex-flow: row nowrap - justify-content: space-between - align-items: center - - .sm-env-header-name-cmp - flex-grow: 2 - display: flex - flex-flow: row nowrap - justify-content: center - align-items: center - - .cl-action-button - color: spark-blue - - .sm-delete-button.cl-action-button - color: status-red; - - .main-layout-no-nav - display: flex; - flex-flow: column nowrap; - - margin: 0px; - - .sm-breadcrumb-segment - background-color brand-blue - - .sm-main-content-segment - display: flex; - flex-flow: column nowrap; - - flex: 1 0; - - .sm-dashboard - padding: 20px; - - //.sm-graph - // flex: 1 0; - .sm-network-graph - flex: 1 0; - - .sm-items-segment - display: flex - flex-flow: row wrap - justify-content: space-around - - .sm-list-info-boxes - display: flex - flex-flow: row wrap - justify-content: space-around - - diff --git a/ui/imports/ui/components/flow-graph/flow-graph.html b/ui/imports/ui/components/flow-graph/flow-graph.html deleted file mode 100644 index 5dd006d..0000000 --- a/ui/imports/ui/components/flow-graph/flow-graph.html +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/ui/imports/ui/components/flow-graph/flow-graph.js b/ui/imports/ui/components/flow-graph/flow-graph.js deleted file mode 100644 index fd2c859..0000000 --- a/ui/imports/ui/components/flow-graph/flow-graph.js +++ /dev/null @@ -1,383 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: FlowGraph - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -// We import d3 v4 not into d3 because old code network visualization use globaly d3 v3. -import * as d3v4 from 'd3'; -import * as R from 'ramda'; -import { Statistics } from '/imports/api/statistics/statistics'; -import { createGraphQuerySchema } from '/imports/api/statistics/helpers'; -//import * as BSON from 'bson'; - -import './flow-graph.html'; - -/* - * Lifecycles - */ - -Template.FlowGraph.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - environment: instance.data.environment, - object_id: instance.data.object_id, - type: instance.data.type, - flowType: instance.data.flowType, - sourceMacAddress: instance.data.sourceMacAddress, - destinationMacAddress: instance.data.destinationMacAddress, - sourceIPv4Address: instance.data.sourceIPv4Address, - destinationIPv4Address: instance.data.destinationIPv4Address, - simulateGraph: instance.data.simulateGraph, - yScale: instance.data.yScale, - timeDeltaNano: 0, - timeDeltaSeconds: 0 - }); - - instance.autorun(() => { - new SimpleSchema({ - env: { type: String }, - object_id: { type: String }, - type: { type: String }, - flowType: { type: String }, - sourceMacAddress: { type: String, optional: true }, - destinationMacAddress: { type: String, optional: true }, - sourceIPv4Address: { type: String, optional: true }, - destinationIPv4Address: { type: String, optional: true }, - simulateGraph: { type: Boolean, optional: true }, - yScale: { type: Number, optional: true }, - startDateTime: { type: String, optional: true }, - }).validate(Template.currentData()); - - let data = Template.currentData(); - - instance.state.set('environment', data.env); - instance.state.set('object_id', data.object_id); - instance.state.set('type', data.type); - instance.state.set('flowType', data.flowType); - instance.state.set('sourceMacAddress', data.sourceMacAddress); - instance.state.set('destinationMacAddress', data.destinationMacAddress); - instance.state.set('sourceIPv4Address', data.sourceIPv4Address); - instance.state.set('destinationIPv4Address', data.destinationIPv4Address); - instance.state.set('simulateGraph', data.simulateGraph); - instance.state.set('yScale', data.yScale); - - let startDateTime = R.ifElse(R.isNil, (_p) => { return moment();}, moment)(data.startDateTime); - let deltaSeconds = moment().diff(startDateTime, 'seconds'); - //let deltaNano = deltaMili * 1000000; - //instance.state.set('timeDeltaNano', deltaNano); - instance.state.set('timeDeltaSeconds', deltaSeconds); - - //let timeStart = startDateTime.valueOf() * 1000000; - let timeStart = startDateTime.unix(); - - //debugger; - // debug purpose: - //let timeStart = 1486661034810432900;// 1486661034810432945; - //let timeDeltaNano = Date.now() * 1000000 - timeStart; - //instance.state.set('timeDeltaNano', timeDeltaNano); - // debug end - - instance.subscribe('statistics!graph-frames', { - env: data.env, - object_id: data.object_id, - type: data.type, - flowType: data.flowType, - timeStart: timeStart, - sourceMacAddress: data.sourceMacAddress, - destinationMacAddress: data.destinationMacAddress, - sourceIPv4Address: data.sourceIPv4Address, - destinationIPv4Address: data.destinationIPv4Address - }); - }); - -}); - -Template.FlowGraph.onDestroyed(function () { - (function (d3) { - let instance = Template.instance(); - let graphContainer = instance.$('.sm-graph'); - var svg = d3.select(graphContainer[0]); - - svg.interrupt(); - var lineSvg = svg.select('g g path.line'); - lineSvg.interrupt(); - })(d3v4); -}); - -Template.FlowGraph.rendered = function() { - let instance = Template.instance(); - - instance.autorun(() => { - - let environment = instance.state.get('environment'); - let object_id = instance.state.get('object_id'); - let type = instance.state.get('type'); - let flowType = instance.state.get('flowType'); - let sourceMacAddress = instance.state.get('sourceMacAddress'); - let destinationMacAddress = instance.state.get('destinationMacAddress'); - let sourceIPv4Address = instance.state.get('sourceIPv4Address'); - let destinationIPv4Address = instance.state.get('destinationIPv4Address'); - let simulateGraph = instance.state.get('simulateGraph'); - let yScale = instance.state.get('yScale'); - //let timeDeltaNano = instance.state.get('timeDeltaNano'); - let timeDeltaSeconds = instance.state.get('timeDeltaSeconds'); - - let graphContainer = instance.$('.sm-graph'); - - generateAllGraph( - d3v4, - graphContainer, - environment, - object_id, - type, - flowType, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address, - simulateGraph, - yScale, - //timeDeltaNano - timeDeltaSeconds - ); - - }); -}; - -/* - * Events - */ - -Template.FlowGraph.events({ -}); - -/* - * Helpers - */ - -Template.FlowGraph.helpers({ -}); - -function generateAllGraph( - d3, - graphContainer, - environment, - object_id, - type, - flowType, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address, - simulateGraph, - yScale, - //timeDeltaNano) { - timeDeltaSeconds) { - - let dataRetrivalFn = createDataRetrivalFn( - d3, - simulateGraph, - environment, - object_id, - type, - flowType, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address, - yScale - ); - - generateGraph( - d3, - dataRetrivalFn, - graphContainer, - //timeDeltaNano, - timeDeltaSeconds, - yScale - ); -} - -function createDataRetrivalFn( - d3, - simulateGraph, - environment, - object_id, - type, - flowType, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address, - yScale -) { - - if (simulateGraph) { - let random = d3.randomNormal(0, yScale); - return function (_start, _end) { - return { - averageThroughput: random() - }; - }; - } - - //return function (startNano, endNano) { - return function (startSeconds, endSeconds) { - //let startBson = BSON.Long.fromNumber(startNano); - //let endBson = BSON.Long.fromNumber(endNano); - //let startBson = startNano; - //let endBson = endNano; - - let query = createGraphQuerySchema( - environment, - object_id, - type, - flowType, - //startBson, - //endBson, - startSeconds, - endSeconds, - sourceMacAddress, - destinationMacAddress, - sourceIPv4Address, - destinationIPv4Address); - - return Statistics.findOne(query); - }; - -/* - return function (timeStart, timeEnd, callback) { - Meteor.call('statistics!graph-frames', { - env: environment, - object_id: object_id, - type: type, - flowType: flowType, - timeStart: timeStart, - timeEnd: timeEnd, - sourceMacAddress: sourceMacAddress, - destinationMacAddress: destinationMacAddress, - sourceIPv4Address: sourceIPv4Address, - destinationIPv4Address: destinationIPv4Address - }, (_err, res) => { - callback(res); - }); - - }; - */ -} - -function generateGraph( - d3, - dataRetrivalFn, - graphContainer, - //timeDeltaNano, - timeDeltaSeconds, - yScale -) { - var n = 40; - - let data = d3.range(n).map(R.always(0)); - let svg = d3.select(graphContainer[0]); - let margin = {top: 20, right: 20, bottom: 20, left: 80}; - let width = +svg.attr('width') - margin.left - margin.right; - let height = +svg.attr('height') - margin.top - margin.bottom; - - svg.interrupt(); - var lineSvg = svg.select('g g path.line'); - lineSvg.interrupt(); - - svg.select('g').remove(); - - var g = svg.append('g').attr( - 'transform', 'translate(' + margin.left + ',' + margin.top + ')'); - - var x = d3.scaleLinear() - .domain([0, n - 1]) - .range([0, width]); - - var y = d3.scaleLinear() - .domain([0, yScale]) - .range([height, 0]); - - var line = d3.line() - .x(function(d, i) { return x(i); }) - .y(function(d, _i) { return y(d); }); - - g.append('defs').append('clipPath') - .attr('id', 'clip') - .append('rect') - .attr('width', width) - .attr('height', height); - - g.append('g') - .attr('class', 'axis axis--x') - .attr('transform', 'translate(0,' + y(0) + ')') - .call(d3.axisBottom(x)); - - g.append('g') - .attr('class', 'axis axis--y') - .call(d3.axisLeft(y)); - - g.append('g') - .attr('clip-path', 'url(#clip)') - .append('path') - .datum(data) - .attr('class', 'line') - .transition() - .duration(500) - .ease(d3.easeLinear) - .on('start', tick); - - //let timeStart = (Date.now() * 1000000) - timeDeltaNano; - let timeStart = moment().unix() - timeDeltaSeconds; - let timeEnd; - let dataPoint; - let lastDataPoint = 0; - - function tick() { - //timeEnd = (Date.now() * 1000000) - timeDeltaNano; - timeEnd = (moment().unix()) - timeDeltaSeconds; - - let statItem = dataRetrivalFn(timeStart, timeEnd); - - if (!R.isNil(statItem)) { - dataPoint = statItem.averageThroughput; - } else { - dataPoint = lastDataPoint; - } - - data.push(dataPoint); - - //timeStart = timeEnd - (4 * 1000000000); - timeStart = timeEnd; - - // Redraw the line. - d3.select(this) - .attr('d', line) - .attr('transform', null); - - // Slide it to the left. - d3.active(this) - .attr('transform', 'translate(' + x(-1) + ',0)') - .transition() - .on('start', tick); - - // Pop the old data point off the front. - data.shift(); - - lastDataPoint = dataPoint; - } -} diff --git a/ui/imports/ui/components/flow-graph/flow-graph.styl b/ui/imports/ui/components/flow-graph/flow-graph.styl deleted file mode 100644 index e858fb9..0000000 --- a/ui/imports/ui/components/flow-graph/flow-graph.styl +++ /dev/null @@ -1,18 +0,0 @@ -/* Set the component style here */ -// "FlowGraph" -.os-flow-graph - - path - stroke: steelblue; - stroke-width: 2; - fill: none; - - line - stroke: black; - - text - font-family: Arial; - font-size: 9pt; - - .sm-graph - background-color:#FDFEFF; diff --git a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.html b/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.html deleted file mode 100644 index 81aaaa0..0000000 --- a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.html +++ /dev/null @@ -1,24 +0,0 @@ - - diff --git a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.js b/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.js deleted file mode 100644 index 5a3b309..0000000 --- a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.js +++ /dev/null @@ -1,112 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: GeneralFolderNodeDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { store } from '/imports/ui/store/store'; -import { InventoryTreeNodeBehavior } from '/imports/ui/lib/inventory-tree-node-behavior'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { Icon } from '/imports/lib/icon'; - -import '/imports/ui/components/data-cubic/data-cubic'; -import '/imports/ui/components/general-node-info-box/general-node-info-box'; - -import './general-folder-node-dashboard.html'; - -/* - * Lifecycles - */ - -Template.GeneralFolderNodeDashboard.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - node: null, - childrenCount: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - if (R.isNil(_id)) { return; } - - Inventory.find({ _id: _id}).forEach((node) => { - InventoryTreeNodeBehavior.subscribeGetChildrenFn(instance, node); - let childrenCount = InventoryTreeNodeBehavior.getChildrenFn(node).count(); - instance.state.set('childrenCount', childrenCount); - instance.state.set('node', node); - }); - }); -}); - -/* -Template.GeneralFolderNodeDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.GeneralFolderNodeDashboard.events({ -}); - -/* - * Helpers - */ - -Template.GeneralFolderNodeDashboard.helpers({ - argsMainCubic: function (childrenCount) { - return { - header: R.path(['components', 'generalFolderNodeDashboard', 'mainCubic', 'header'] - )(store.getState().api.i18n), - dataInfo: R.toString(childrenCount), - icon: new Icon({ type: 'fa', name: 'desktop' }), - }; - }, - - argsGeneralNodeInfoBox: function (node) { - return { - objectName: node.object_name, - type: node.type, - lastScanned: node.last_scanned, - description: node.description, - }; - }, - - childrenCount: function () { - let instance = Template.instance(); - return instance.state.get('childrenCount'); - }, - - children: function () { - let instance = Template.instance(); - let node = instance.state.get('node'); - return InventoryTreeNodeBehavior.getChildrenFn(node); - } -}); // end: helpers - - diff --git a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.styl b/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.styl deleted file mode 100644 index 49967c6..0000000 --- a/ui/imports/ui/components/general-folder-node-dashboard/general-folder-node-dashboard.styl +++ /dev/null @@ -1,12 +0,0 @@ -.os-general-folder-node-dashboard - display: flex; - flex-flow: column nowrap; - align-items: center; - - .sm-children-section - display: flex; - flex-flow: row wrap; - justify-content: center; - - >.sm-child-info-box - padding: 10px; diff --git a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.html b/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.html deleted file mode 100644 index 417ba8b..0000000 --- a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.html +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.js b/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.js deleted file mode 100644 index 3009ee3..0000000 --- a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.js +++ /dev/null @@ -1,84 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: GeneralNodeDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Inventory } from '/imports/api/inventories/inventories'; - -import '/imports/ui/components/detailed-node-info-box/detailed-node-info-box'; - -import './general-node-dashboard.html'; - -/* - * Lifecycles - */ - -Template.GeneralNodeDashboard.onCreated(function() { - var instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - node: null, - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - Inventory.find({ _id: _id }).forEach((node) => { - instance.state.set('node', node); - }); - }); -}); - -/* -Template.GeneralNodeDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.GeneralNodeDashboard.events({ -}); - -/* - * Helpers - */ - -Template.GeneralNodeDashboard.helpers({ - getNode: function () { - let instance = Template.instance(); - return instance.state.get('node'); - }, - - argsGenNodeInfoBox: function (node) { - return { - node: node, - }; - } -}); - - diff --git a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.styl b/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.styl deleted file mode 100644 index 6d3727b..0000000 --- a/ui/imports/ui/components/general-node-dashboard/general-node-dashboard.styl +++ /dev/null @@ -1,6 +0,0 @@ -.os-general-node-dashboard - display: flex; - flex-flow: column nowrap; - align-items: center; - - //.sm-node-info-box diff --git a/ui/imports/ui/components/general-node-info-box/general-node-info-box.html b/ui/imports/ui/components/general-node-info-box/general-node-info-box.html deleted file mode 100644 index 8aed8f2..0000000 --- a/ui/imports/ui/components/general-node-info-box/general-node-info-box.html +++ /dev/null @@ -1,37 +0,0 @@ - - diff --git a/ui/imports/ui/components/general-node-info-box/general-node-info-box.js b/ui/imports/ui/components/general-node-info-box/general-node-info-box.js deleted file mode 100644 index 4b88945..0000000 --- a/ui/imports/ui/components/general-node-info-box/general-node-info-box.js +++ /dev/null @@ -1,63 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: GeneralNodeInfoBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; - -import './general-node-info-box.html'; - -/* - * Lifecycles - */ - -Template.GeneralNodeInfoBox.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - objectName: { type: String }, - type: { type: String }, - lastScanned: { type: Date, optional: true }, - description: { type: String, optional: true }, - }).validate(data); - - }); - -}); - -/* -Template.GeneralNodeInfoBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.GeneralNodeInfoBox.events({ -}); - -/* - * Helpers - */ - -Template.GeneralNodeInfoBox.helpers({ -}); - - diff --git a/ui/imports/ui/components/general-node-info-box/general-node-info-box.styl b/ui/imports/ui/components/general-node-info-box/general-node-info-box.styl deleted file mode 100644 index 4d4cc7a..0000000 --- a/ui/imports/ui/components/general-node-info-box/general-node-info-box.styl +++ /dev/null @@ -1,33 +0,0 @@ -.os-general-node-info-box - display: flex; - flex-flow: row nowrap; - - .sm-icon-segment - flex: 0 1 70px; - - .sm-info-segment - flex: 1; - display: flex; - flex-flow: column nowrap; - - .sm-info-title - color: #0a9ad7; - font-size: 2em; - border-bottom: 3px solid #0a9ad7; - line-height: 1.5em; - - .sm-info-bits - padding: 5px 0px; - - display: flex; - flex-flow: column nowrap; - - .cl-info-bit - display: flex; - flex-flow: row nowrap; - - .cl-label - flex: 0 0 90px; - color: black; - font-weight: bold; - diff --git a/ui/imports/ui/components/get-started/get-started.html b/ui/imports/ui/components/get-started/get-started.html deleted file mode 100644 index 2277547..0000000 --- a/ui/imports/ui/components/get-started/get-started.html +++ /dev/null @@ -1,412 +0,0 @@ - - diff --git a/ui/imports/ui/components/get-started/get-started.js b/ui/imports/ui/components/get-started/get-started.js deleted file mode 100644 index a1ae0f0..0000000 --- a/ui/imports/ui/components/get-started/get-started.js +++ /dev/null @@ -1,32 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: getStarted - */ - -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -//import { setCurrentNode } from '/imports/ui/actions/navigation'; -import { store } from '/imports/ui/store/store'; -import { setMainAppSelectedEnvironment } from '/imports/ui/actions/main-app.actions'; - -import '/imports/ui/components/accordion-wiki-menu/accordion-wiki-menu'; - -import './get-started.html'; - -Template.getstarted.onCreated(function () { - store.dispatch(setMainAppSelectedEnvironment(null)); -}); - -Template.getstarted.onDestroyed(function () { -}); - -Template.getstarted.helpers({ -}); diff --git a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html b/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html deleted file mode 100644 index 4ce9787..0000000 --- a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.js b/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.js deleted file mode 100644 index 371a983..0000000 --- a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.js +++ /dev/null @@ -1,84 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: GraphTooltipWindow - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { store } from '/imports/ui/store/store'; -import { closeGraphTooltipWindow } from '/imports/ui/actions/graph-tooltip-window.actions'; - -import './graph-tooltip-window.html'; - -/* - * Lifecycles - */ - -Template.GraphTooltipWindow.onCreated(function() { - let instance = this; - instance.simpleState = { - gotIn: false, - }; - - instance.autorun(() => { - new SimpleSchema({ - label: { type: String }, - title: { type: String }, - left: { type: Number }, - top: { type: Number }, - show: { type: Boolean } - }).validate(Template.currentData()); - }); -}); - -/* -Template.GraphTooltipWindow.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.GraphTooltipWindow.events({ - 'mouseenter .os-graph-tooltip-window': function(e, instance) { - instance.simpleState.gotIn = true; - }, - - 'mouseleave .os-graph-tooltip-window': function(e, instance) { - if (!instance.data.show) { return; } - - //e.preventDefault(); - //e.stopPropagation(); - if (instance.simpleState.gotIn) { - instance.simpleState.gotIn = false; - store.dispatch(closeGraphTooltipWindow()); - } - }, - - 'click .os-graph-tooltip-window': function(e, instance) { - if (!instance.data.show) { return; } - - e.preventDefault(); - e.stopPropagation(); - store.dispatch(closeGraphTooltipWindow()); - }, -}); - -/* - * Helpers - */ - -Template.GraphTooltipWindow.helpers({ -}); - - diff --git a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.styl b/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.styl deleted file mode 100644 index 1bbb9d5..0000000 --- a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.styl +++ /dev/null @@ -1,28 +0,0 @@ -/* Set the component style here */ -// "GraphTooltipWindow" -.os-graph-tooltip-window - visibility: hidden; - - max-height: 300px; - overflow: auto; - position: absolute; - text-align: left; - opacity: 0 - font: normal 16px sans-serif; - /* width: 60px; */ - /* height: 28px; */ - padding: 20px; - background: dk-gray1; - color white - border: 2px solid stark-blue - // pointer-events: none; - - transition: visibility 0.5s, opacity 0.5s linear - - .sm-label - font-weight: bold; - -.os-graph-tooltip-window.cl-visible - visibility: visible - opacity: 0.9 - transition: visibility 0.2s, opacity 0.2s linear diff --git a/ui/imports/ui/components/host-dashboard/host-dashboard.html b/ui/imports/ui/components/host-dashboard/host-dashboard.html deleted file mode 100644 index d33ee57..0000000 --- a/ui/imports/ui/components/host-dashboard/host-dashboard.html +++ /dev/null @@ -1,29 +0,0 @@ - - diff --git a/ui/imports/ui/components/host-dashboard/host-dashboard.js b/ui/imports/ui/components/host-dashboard/host-dashboard.js deleted file mode 100644 index 4830543..0000000 --- a/ui/imports/ui/components/host-dashboard/host-dashboard.js +++ /dev/null @@ -1,197 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: HostDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { regexEscape } from '/imports/lib/regex-utils'; -import * as R from 'ramda'; -import { store } from '/imports/ui/store/store'; -import { Icon } from '/imports/lib/icon'; - -//import '/imports/ui/components/accordionNavMenu/accordionNavMenu'; -import '/imports/ui/components/data-cubic/data-cubic'; - -import './host-dashboard.html'; - -let infoBoxes = [{ - header: ['components', 'hostDashboard', 'infoBoxes', 'instances', 'header'], - dataSource: 'instancesCount', - icon: { type: 'fa', name: 'desktop' }, - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'vServices', 'header'], - dataSource: 'vServicesCount', - icon: { type: 'fa', name: 'object-group' }, - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'vConnectors', 'header'], - dataSource: 'vConnectorsCount', - icon: { type: 'fa', name: 'compress' }, - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'ports', 'header'], - dataSource: 'portsCount', - icon: { type: 'fa', name: 'compress' }, - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'networkAgents', 'header'], - dataSource: 'networkAgentsCount', - icon: { type: 'fa', name: 'compress' }, // todo: icon - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'pnics', 'header'], - dataSource: 'pnicsCount', - icon: { type: 'fa', name: 'compress' }, // todo: icon - theme: 'dark' -}, { - header: ['components', 'hostDashboard', 'infoBoxes', 'vEdges', 'header'], - dataSource: 'vEdgesCount', - icon: { type: 'fa', name: 'external-link' }, - theme: 'dark' -}]; - -/* - * Lifecycles - */ - -Template.HostDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id_path: null, - instancesCount: 0, - vServicesCount: 0, - vConnectors: 0, - portsCount: 0, - networkAgentsCount: 0, - pnicsCount: 0, - vEdgesCount: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - Inventory.find({ _id: _id }).forEach((host) => { - instance.state.set('id_path', host.id_path); - - instance.subscribe('inventory?id_path', host.id_path); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'instance'); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'vservice'); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'vconnector'); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'network_agent'); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'pnic'); - instance.subscribe('inventory?id_path_start&type', host.id_path, 'vedge'); - - Inventory.find({ id_path: host.id_path }).forEach((host) => { - instance.subscribe('inventory?env&binding:host_id&type', - host.environment, host.id, 'port'); - - instance.state.set('portsCount', Inventory.find({ - environment: host.environment, - 'binding:host_id': host.id, - type: 'port' - }).count()); - }); - - let idPathExp = new RegExp(`^${regexEscape(host.id_path)}`); - - instance.state.set('instancesCount', Inventory.find({ - id_path: idPathExp, - type: 'instance' - }).count()); - - instance.state.set('vServicesCount', Inventory.find({ - id_path: idPathExp, - type: 'vservice' - }).count()); - - instance.state.set('vConnectorsCount', Inventory.find({ - id_path: idPathExp, - type: 'vconnector' - }).count()); - - instance.state.set('networkHostsCount', Inventory.find({ - id_path: idPathExp, - type: 'network_host' - }).count()); - - instance.state.set('pnicsCount', Inventory.find({ - id_path: idPathExp, - type: 'pnic' - }).count()); - - instance.state.set('vEdgesCount', Inventory.find({ - id_path: idPathExp, - type: 'vedge' - }).count()); - }); - - }); -}); - -/* -Template.HostDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.HostDashboard.events({ -}); - -/* - * Helpers - */ - -Template.HostDashboard.helpers({ - host: function () { - let instance = Template.instance(); - let host_id_path = instance.state.get('id_path'); - - return Inventory.findOne({ id_path: host_id_path }); - }, - - infoBoxes: function () { - return infoBoxes; - }, - - argsInfoBox: function (infoBox) { - let instance = Template.instance(); - - return { - header: R.path(infoBox.header, store.getState().api.i18n), - dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(infoBox.icon), - theme: infoBox.theme - }; - }, -}); - - diff --git a/ui/imports/ui/components/host-dashboard/host-dashboard.styl b/ui/imports/ui/components/host-dashboard/host-dashboard.styl deleted file mode 100644 index aa335b2..0000000 --- a/ui/imports/ui/components/host-dashboard/host-dashboard.styl +++ /dev/null @@ -1,6 +0,0 @@ -/* Set the component style here */ -.os-host-dashboard - .sm-info-boxes - display: flex - flex-flow: row wrap; - justify-content: space-around diff --git a/ui/imports/ui/components/icon/icon.html b/ui/imports/ui/components/icon/icon.html deleted file mode 100644 index 04487d2..0000000 --- a/ui/imports/ui/components/icon/icon.html +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/ui/imports/ui/components/icon/icon.js b/ui/imports/ui/components/icon/icon.js deleted file mode 100644 index 06010a4..0000000 --- a/ui/imports/ui/components/icon/icon.js +++ /dev/null @@ -1,48 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: Icon - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './icon.html'; - -/* - * Lifecycles - */ - -Template.Icon.onCreated(function() { -}); - -/* -Template.Icon.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.Icon.events({ -}); - -/* - * Helpers - */ - -Template.Icon.helpers({ - iconType: function (type, targetType) { - return type === targetType; - } -}); - - diff --git a/ui/imports/ui/components/icon/icon.styl b/ui/imports/ui/components/icon/icon.styl deleted file mode 100644 index 1841a36..0000000 --- a/ui/imports/ui/components/icon/icon.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "Icon" diff --git a/ui/imports/ui/components/index.styl b/ui/imports/ui/components/index.styl deleted file mode 100644 index 11485fd..0000000 --- a/ui/imports/ui/components/index.styl +++ /dev/null @@ -1,59 +0,0 @@ -@import 'breadcrumb/*' -@import 'breadcrumbNode/*' -@import 'environment/*' -@import 'environment-dashboard/*' -@import 'scanning-request/*' -@import 'environment-wizard/*' -@import 'search-auto-complete-list/*'; -@import 'auto-search-result-line/*'; -@import 'top-navbar-menu/*'; -@import 'data-cubic/*'; -@import 'project-dashboard/*'; -@import 'region-dashboard/*'; -@import 'zone-dashboard/*'; -@import 'host-dashboard/*'; -@import 'list-info-box/*'; -@import 'aggregate-dashboard/*'; -@import 'graph-tooltip-window/*'; -@import 'vedge-info-window/*'; -@import 'flow-graph/*'; -@import 'time-selection-widget/*'; -@import 'scans-list/*'; -@import 'link-types-list/*'; -@import 'link-type/*'; -@import 'clique-types-list/*'; -@import 'clique-type/*'; -@import 'clique-constraints-list/*'; -@import 'clique-constraint/*'; -@import 'env-delete-modal/*'; -@import 'accordion-nav-menu/*'; -@import 'accordionTreeNode/*'; -@import 'main/*'; -@import 'loading/*'; -@import 'user-list/*'; -@import 'user/*'; -@import 'alarm-icons/*'; -@import 'messages-list/*'; -@import 'message/*'; -@import 'env-form/*'; -@import 'tree-node/*'; -@import 'dashboard/*'; -@import 'messages-modal/*'; -@import 'messages-info-box/*'; -@import 'general-folder-node-dashboard/*'; -@import 'general-node-info-box/*'; -@import 'general-node-dashboard/*'; -@import 'detailed-node-info-box/*'; -@import 'landing/*'; -@import 'pager/*'; -@import 'd3graph/*'; -@import 'inventory-properties-display/*'; -@import 'scheduled-scan/*'; -@import 'mt-select/*'; -@import 'scheduled-scans-list/*'; -@import 'new-scanning/*'; -@import 'selectable-ordered-input/*'; -@import 'network-graph-manager/*'; -@import 'network-graph/*'; -@import 'environment-box/*'; -@import 'user-settings/*'; diff --git a/ui/imports/ui/components/input-model/input-model.html b/ui/imports/ui/components/input-model/input-model.html deleted file mode 100644 index 30a7ad2..0000000 --- a/ui/imports/ui/components/input-model/input-model.html +++ /dev/null @@ -1,21 +0,0 @@ - - diff --git a/ui/imports/ui/components/input-model/input-model.js b/ui/imports/ui/components/input-model/input-model.js deleted file mode 100644 index 9c515c5..0000000 --- a/ui/imports/ui/components/input-model/input-model.js +++ /dev/null @@ -1,116 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: InputModel - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import './input-model.html'; - -/* - * Lifecycles - */ - -Template.InputModel.onCreated(function() { -}); - -/* -Template.InputModel.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.InputModel.events({ - 'input .inputField': function (event, instance) { - if (instance.data.type === 'checkbox') { return; } - - let value; - switch (event.target.type) { - case 'number': - value = event.target.valueAsNumber; - break; - - default: - value = event.target.value; - } - - instance.data.setModel(value); - }, - 'click .inputField': function (event, instance) { - if (instance.data.type !== 'checkbox') { return; } - - let element = instance.$('.inputField')[0]; - instance.data.setModel(element.checked); - } -}); - -/* - * Helpers - */ - -Template.InputModel.helpers({ - calcAttrs: function () { - let instance = Template.instance(); - let attrs = {}; - - if (instance.data.type === 'checkbox') { - if (instance.data.value) { - attrs.checked = true; - } - } else { - attrs.value = instance.data.value; - } - - return attrs; - }, - - calcType: function () { - let instance = Template.instance(); - return instance.data.type; - }, - - calcId: function () { - }, - - calcName: function () { - }, - - calcClass: function () { - let instance = Template.instance(); - if (R.isNil(instance.data.classes)) { - return 'form-control'; - } else { - return instance.data.classes; - } - }, - - calcPlaceholder: function () { - let instance = Template.instance(); - if (R.isNil(instance.data.placeholder)) { return ''; } - - return instance.data.placeholder; - }, - - markIfDisabled: function () { - let instance = Template.instance(); - let attrs = {}; - if (instance.data.disabled) { - attrs = R.assoc('disabled', true, attrs); - } - - return attrs; - } -}); diff --git a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.html b/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.html deleted file mode 100644 index b4c5267..0000000 --- a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.html +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.js b/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.js deleted file mode 100644 index 34eb4c5..0000000 --- a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.js +++ /dev/null @@ -1,90 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: InventoryPropertiesDisplay - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { Inventory } from '/imports/api/inventories/inventories'; - -import './inventory-properties-display.html'; - -/* - * Lifecycles - */ - -Template.InventoryPropertiesDisplay.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - data: null, - env: null, - nodeId: null, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - try { - new SimpleSchema({ - env: { type: String }, - nodeId: { type: String }, - displayFn: { type: Function }, - }).validate(data); - } catch (e) { - // meteor sometimes does not show the validation error and throws unclear view error. - console.error(`error in validate ${e}`); - throw e; - } - - instance.state.set('env', data.env); - instance.state.set('nodeId', data.nodeId); - }); - - instance.autorun(function () { - let env = instance.state.get('env'); - let nodeId = instance.state.get('nodeId'); - if (R.any(R.isNil)([env, nodeId])) { return; } - - instance.subscribe('inventory?env&id', env, nodeId); - - Inventory.find({ environment: env, id: nodeId }).forEach((node) => { - instance.state.set('node', node); - }); - }); -}); - -/* -Template.InventoryPropertiesDisplay.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.InventoryPropertiesDisplay.events({ -}); - -/* - * Helpers - */ - -Template.InventoryPropertiesDisplay.helpers({ - getNode: function () { - let instance = Template.instance(); - return instance.state.get('node'); - } -}); - - diff --git a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.styl b/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.styl deleted file mode 100644 index 734c337..0000000 --- a/ui/imports/ui/components/inventory-properties-display/inventory-properties-display.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "InentoryPropertiesDisplay" diff --git a/ui/imports/ui/components/landing/landing.html b/ui/imports/ui/components/landing/landing.html deleted file mode 100644 index 2f0d4df..0000000 --- a/ui/imports/ui/components/landing/landing.html +++ /dev/null @@ -1,201 +0,0 @@ - - diff --git a/ui/imports/ui/components/landing/landing.js b/ui/imports/ui/components/landing/landing.js deleted file mode 100644 index 8a42e12..0000000 --- a/ui/imports/ui/components/landing/landing.js +++ /dev/null @@ -1,35 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import './landing.html'; - -Template.landing.onCreated(function() { -}); - -Template.landing.rendered = function(){ - - // init wow lib - new WOW().init(); - - // smooth scrolling function - $(function() { - $('a[href*="#"]:not([href="#"])').click(function() { - if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { - var target = $(this.hash); - target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); - if (target.length) { - $('html, body').animate({ - scrollTop: target.offset().top - }, 1000); - return false; - } - } - }); - }); - -}; diff --git a/ui/imports/ui/components/landing/landing.styl b/ui/imports/ui/components/landing/landing.styl deleted file mode 100644 index eb8e254..0000000 --- a/ui/imports/ui/components/landing/landing.styl +++ /dev/null @@ -1,80 +0,0 @@ -.os-landing - - section - display: flex; - flex-flow: column; - align-items: center; - - .sm-section-content - display: flex; - flex-flow: column nowrap; - align-items: center; - max-width: 1000px; - - .sm-landing-hero-section - background-color: #2196F3; - color: #f9f9f9; - - .sm-section-content - - .sm-login-subsection - display: flex; - justify-content: space-between; - align-self: stretch; - - .sm-main-content - display: flex; - flex-flow: column nowrap; - align-items: center; - - .sm-main-header - display: flex; - flex-flow: row; - justify-content: space-around; - - .sm-logo - padding: 30px; - width: 260px; - - .sm-description - display: flex; - flex-flow: column nowrap; - align-items: center; - - p - text-align: center; - font-size: 20px; - - .sm-landing-section-2 - border-color: #fff; - padding: 40px 0; - - .sm-section-content - font-size: blue; - - .sm-desc-point - display: flex; - flex-flow: row nowrap; - justify-content: center; - - margin: 40px 0; - - .sm-desc-point-content - flex: 0 0 400px; - - li - margin: 10px 0; - - .sm-desc-point-icon - display: flex; - justify-content: center; - align-items: center; - - padding: 0 60px; - - img - width: 300px; - padding: 0 10px; - - img.sm-big-image-icon - width: 600px; diff --git a/ui/imports/ui/components/link-type/link-type.html b/ui/imports/ui/components/link-type/link-type.html deleted file mode 100644 index b2a81dd..0000000 --- a/ui/imports/ui/components/link-type/link-type.html +++ /dev/null @@ -1,88 +0,0 @@ - - diff --git a/ui/imports/ui/components/link-type/link-type.js b/ui/imports/ui/components/link-type/link-type.js deleted file mode 100644 index c14209a..0000000 --- a/ui/imports/ui/components/link-type/link-type.js +++ /dev/null @@ -1,328 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: LinkType - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { LinkTypes } from '/imports/api/link-types/link-types'; -//import { Environments } from '/imports/api/environments/environments'; -import { Constants } from '/imports/api/constants/constants'; -import { insert, remove, update } from '/imports/api/link-types/methods'; -import { parseReqId } from '/imports/lib/utilities'; - - -import './link-type.html'; - -/* - * Lifecycles - */ - -Template.LinkType.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - //env: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - pageHeader: 'Link Type' - }); - - instance.autorun(function () { - let controller = Iron.controller(); - let params = controller.getParams(); - let query = params.query; - - new SimpleSchema({ - action: { type: String, allowedValues: ['insert', 'view', 'remove', 'update'] }, - //env: { type: String, optional: true }, - id: { type: String, optional: true } - }).validate(query); - - switch (query.action) { - case 'insert': - initInsertView(instance, query); - break; - - case 'view': - initViewView(instance, query); - break; - - case 'update': - initUpdateView(instance, query); - break; - - case 'remove': - initRemoveView(instance, query); - break; - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.LinkType.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.LinkType.events({ - 'submit .sm-item-form': function(event, instance) { - event.preventDefault(); - - let _id = instance.state.get('id'); - //let env = instance.$('.sm-input-env')[0].value; - let desc = instance.$('.sm-input-desc')[0].value; - let endPointA = instance.$('.sm-input-endpoint-a')[0].value; - let endPointB = instance.$('.sm-input-endpoint-b')[0].value; - - submitItem(instance, - _id, - //env, - desc, - endPointA, - endPointB); - } -}); - -/* - * Helpers - */ - -Template.LinkType.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - /* - envsList: function () { - return Environments.find({}); - }, - */ - - objectTypesList: function () { - return R.ifElse(R.isNil, R.always([]), R.prop('data') - )(Constants.findOne({ name: 'object_types_for_links' })); - }, - - getAttrDisabled: function () { - let instance = Template.instance(); - let result = {}; - let action = instance.state.get('action'); - - if (R.contains(action, ['view', 'remove'])) { - result = R.assoc('disabled', true, result); - } - - return result; - }, - - getModel: function () { - let instance = Template.instance(); - return instance.state.get('model'); - }, - - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - getAttrSelected: function (optionValue, modelValue) { - let result = {}; - - if (optionValue === modelValue) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - } -}); - -function initInsertView(instance, query) { - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - instance.state.set('model', LinkTypes.schema.clean({ - //environment: instance.state.get('env') - })); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - //instance.subscribe('link_types?env', query.env); -} - -function initViewView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - instance.subscribe('link_types?_id', reqId.id); - - LinkTypes.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); - -} - -function initUpdateView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('constants'); - instance.subscribe('link_types?_id', reqId.id); - - LinkTypes.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); - -} - -function initRemoveView(instance, query) { - initViewView(instance, query); -} - -function subscribeToOptionsData(_instance) { - //instance.subscribe('environments_config'); -} - -function submitItem( - instance, - id, - //env, - desc, - endPointA, - endPointB) { - - let action = instance.state.get('action'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - //environment: env, - description: desc, - endPointA: endPointA, - endPointB: endPointB, - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: id.id, - description: desc, - endPointA: endPointA, - endPointB: endPointB, - }, processActionResult.bind(null, instance)); - break; - - case 'remove': - remove.call({ - _id: id.id - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - return; - } - - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - switch (action) { - case 'insert': - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - break; - - case 'remove': - instance.state.set('message', 'Record had been removed successfully'); - instance.state.set('disabled', true); - break; - - case 'update': - instance.state.set('message', 'Record had been updated successfully'); - break; - } - - Router.go('/link-types-list'); -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - case 'update': - return 'Update'; - default: - return 'Submit'; - } -} diff --git a/ui/imports/ui/components/link-type/link-type.styl b/ui/imports/ui/components/link-type/link-type.styl deleted file mode 100644 index e9178e0..0000000 --- a/ui/imports/ui/components/link-type/link-type.styl +++ /dev/null @@ -1,34 +0,0 @@ -.os-link-type - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 170px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; diff --git a/ui/imports/ui/components/link-types-list/link-types-list.html b/ui/imports/ui/components/link-types-list/link-types-list.html deleted file mode 100644 index 575557d..0000000 --- a/ui/imports/ui/components/link-types-list/link-types-list.html +++ /dev/null @@ -1,56 +0,0 @@ - - diff --git a/ui/imports/ui/components/link-types-list/link-types-list.js b/ui/imports/ui/components/link-types-list/link-types-list.js deleted file mode 100644 index 5eab355..0000000 --- a/ui/imports/ui/components/link-types-list/link-types-list.js +++ /dev/null @@ -1,87 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: LinkTypesList - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { LinkTypes } from '/imports/api/link-types/link-types'; -import { Roles } from 'meteor/alanning:roles'; - -import './link-types-list.html'; - -/* - * Lifecycles - */ - -Template.LinkTypesList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null - }); - - instance.autorun(function () { - - - //let data = Template.currentData(); - - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - env: { type: String, optional: true }, - }).validate(query); - - let env = query.env; - if (R.isNil(env)) { - instance.state.set('env', null); - } else { - instance.state.set('env', env); - } - - instance.subscribe('link_types?env*', env); - }); -}); - -/* -Template.LinkTypesList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.LinkTypesList.events({ -}); - -/* - * Helpers - */ - -Template.LinkTypesList.helpers({ - linkTypes: function () { - //let instance = Template.instance(); - - //var env = instance.state.get('env'); - //return Scans.find({ environment: env }); - return LinkTypes.find({}); - }, - - isAuthManageLinkTypes: function () { - return Roles.userIsInRole(Meteor.userId(), 'manage-link-types', Roles.GLOBAL_GROUP); - }, -}); // end - helpers diff --git a/ui/imports/ui/components/link-types-list/link-types-list.styl b/ui/imports/ui/components/link-types-list/link-types-list.styl deleted file mode 100644 index acb0a81..0000000 --- a/ui/imports/ui/components/link-types-list/link-types-list.styl +++ /dev/null @@ -1,23 +0,0 @@ -.os-link-types-list - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-link-types-table - th - color: spark-blue - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-add-new-link - color: spark-blue - diff --git a/ui/imports/ui/components/list-info-box/list-info-box.html b/ui/imports/ui/components/list-info-box/list-info-box.html deleted file mode 100644 index 8fa552f..0000000 --- a/ui/imports/ui/components/list-info-box/list-info-box.html +++ /dev/null @@ -1,60 +0,0 @@ - - diff --git a/ui/imports/ui/components/list-info-box/list-info-box.js b/ui/imports/ui/components/list-info-box/list-info-box.js deleted file mode 100644 index 3fe4542..0000000 --- a/ui/imports/ui/components/list-info-box/list-info-box.js +++ /dev/null @@ -1,111 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: ListInfoBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import { LocalCollection } from 'meteor/minimongo'; -import { Icon } from '/imports/lib/icon'; - -import './list-info-box.html'; - -/* - * Lifecycles - */ - -Template.ListInfoBox.onCreated(function() { - let instance = this; - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - header: { type: String }, - list: { type: LocalCollection.Cursor, blackbox: true }, - icon: { type: Icon, blackbox: true }, - listItemFormat: { - type: { - getLabelFn: { type: Function }, - getValueFn: { type: Function }, - }, - blackbox: true - }, - onItemSelected: { type: Function }, - - }).validate(data); - - }); -}); - -/* -Template.ListInfoBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ListInfoBox.events({ - 'click .os-list-item'(event) { - let instance = Template.instance(); - let val = event.target.attributes['data-value'].value; - instance.data.onItemSelected(val); - } -}); - -/* - * Helpers - */ - -Template.ListInfoBox.helpers({ - options: function (list, listItemFormat) { - //let instance = Template.instance(); - - let options = R.map((listItem) => { - return { - label: listItemFormat.getLabelFn(listItem), - value: listItemFormat.getValueFn(listItem) - }; - }, list.fetch()); - - return options; - }, - - itemsCount: function () { - let instance = Template.instance(); - return instance.data.list.count(); - }, - - argsSelect: function (list, listItemFormat) { - let instance = Template.instance(); - - let options = R.map((listItem) => { - return { - label: listItemFormat.getLabelFn(listItem), - value: listItemFormat.getValueFn(listItem) - }; - }, list.fetch()); - - return { - values: [], - options: options, - showNullOption: true, - nullOptionLabel: 'Select from dropdown', - setModel: function (val) { - instance.data.onItemSelected(val); - }, - }; - } -}); - - diff --git a/ui/imports/ui/components/list-info-box/list-info-box.styl b/ui/imports/ui/components/list-info-box/list-info-box.styl deleted file mode 100644 index 43c8d0a..0000000 --- a/ui/imports/ui/components/list-info-box/list-info-box.styl +++ /dev/null @@ -1,4 +0,0 @@ -.os-list-info-box - .sm-items-dropdown-menu - li - cursor: pointer diff --git a/ui/imports/ui/components/loading/loading.html b/ui/imports/ui/components/loading/loading.html deleted file mode 100644 index 6a082c8..0000000 --- a/ui/imports/ui/components/loading/loading.html +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/ui/imports/ui/components/loading/loading.js b/ui/imports/ui/components/loading/loading.js deleted file mode 100644 index a83f6d3..0000000 --- a/ui/imports/ui/components/loading/loading.js +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import './loading.html'; - -Template.loading.rendered = function () { - if ( ! Session.get('loadingSplash') ) { - this.loading = window.pleaseWait({ - logo: '/cisco-logo-load.png', - // logo: '', - backgroundColor: '#2196F3', - loadingHtml: message + spinner - }); - Session.set('loadingSplash', true); // just show loading splash once - } -}; - -Template.loading.destroyed = function () { - if ( this.loading ) { - this.loading.finish(); - } -}; - -var message = '

Loading Calipso

'; -var spinner = '
'; diff --git a/ui/imports/ui/components/loading/loading.styl b/ui/imports/ui/components/loading/loading.styl deleted file mode 100644 index e69de29..0000000 diff --git a/ui/imports/ui/components/main/main.html b/ui/imports/ui/components/main/main.html deleted file mode 100644 index 96f6875..0000000 --- a/ui/imports/ui/components/main/main.html +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/ui/imports/ui/components/main/main.js b/ui/imports/ui/components/main/main.js deleted file mode 100644 index 525c53e..0000000 --- a/ui/imports/ui/components/main/main.js +++ /dev/null @@ -1,98 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import '/imports/ui/components/messages-modal/messages-modal'; -import './main.html'; - -Template.mainPage.rendered = function(){ - $(window).scroll(function(){ - var windowWidth = $(this).width(); - //var windowHeight = $(this).height(); - var windowScrollTop = $(this).scrollTop(); - - // effect - No1 - if(windowScrollTop>60){ - $('.banner h2').css('display','none'); - $('.banner .info').css('display','block'); - }else{ - $('.banner h2').css('display','block'); - $('.banner .info').css('display','none'); - } - - // effect - No2 - var firstAnimation = function(){ - $('.clients .clients-info').each( - function(){ - $(this).delay(500).animate( - {opacity:1,height:'180',width:'250'},2000);} - ); - }; - - // effect - No3 - var secondAnimation = function(){ - $('.method:eq(0)').delay(1000).animate({opacity:1},'slow', function(){ - $(this).find('h4').css('background-color','#B5C3D5'); - }); - $('.method:eq(1)').delay(2000).animate({opacity:1},'slow', function(){ - $(this).find('h4').css('background-color','#B5C3D5'); - }); - $('.method:eq(2)').delay(3000).animate({opacity:1},'slow', function(){ - $(this).find('h4').css('background-color','#B5C3D5'); - }); - $('.method:eq(3)').delay(4000).animate({opacity:1},'slow', function(){ - $(this).find('h4').css('background-color','#B5C3D5'); - }); - }; - - // effect - No4 - var thirdAnimation = function(){ - $('.blogs').find('p').delay(1400).animate({opacity:1, left:0},'slow'); - $('.blogs').find('img').delay(2000).animate({opacity:1, right:0},'slow'); - $('.blogs').find('button').delay(2500).animate({opacity:1, bottom:0},'slow'); - }; - - - if(windowWidth<=549){ - if(windowScrollTop>600){ - $('.clients').css('background','tomato'); - firstAnimation(); - } - if(windowScrollTop>1750){ - $('.process').css('background','tomato'); - secondAnimation(); - } - if(windowScrollTop>3500){ - $('.blogs').css('background','tomato'); - thirdAnimation(); - } - }else if(windowWidth>549 && windowWidth<=991){ - if(windowScrollTop>480){ - $('.clients').css('background','tomato'); - firstAnimation(); - }if(windowScrollTop>1150){ - $('.process').css('background','tomato'); - secondAnimation(); - }if(windowScrollTop>2200){ - $('.blogs').css('background','tomato'); - thirdAnimation(); - } - }else{ - if(windowScrollTop>450){ - $('.clients').css('background','tomato'); - firstAnimation(); - }if(windowScrollTop>850){ - $('.process').css('background','tomato'); - secondAnimation(); - } - if(windowScrollTop>1600){ - $('.blogs').css('background','tomato'); - thirdAnimation(); - } - } - }); -}; diff --git a/ui/imports/ui/components/main/main.styl b/ui/imports/ui/components/main/main.styl deleted file mode 100644 index e69de29..0000000 diff --git a/ui/imports/ui/components/message/message.html b/ui/imports/ui/components/message/message.html deleted file mode 100644 index 3508372..0000000 --- a/ui/imports/ui/components/message/message.html +++ /dev/null @@ -1,168 +0,0 @@ - - diff --git a/ui/imports/ui/components/message/message.js b/ui/imports/ui/components/message/message.js deleted file mode 100644 index 10ff830..0000000 --- a/ui/imports/ui/components/message/message.js +++ /dev/null @@ -1,252 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: Message - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Messages } from '/imports/api/messages/messages'; -import { Constants } from '/imports/api/constants/constants'; -import { Environments } from '/imports/api/environments/environments'; -import { idToStr } from '/imports/lib/utilities'; -//import { insert, update, remove } from '/imports/api/clique-types/methods'; -import { parseReqId } from '/imports/lib/utilities'; -//import { store } from '/imports/ui/store/store'; -//import { setCurrentNode } from '/imports/ui/actions/navigation'; - -import './message.html'; - -/* - * Lifecycles - */ - -Template.Message.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - pageHeader: 'Message' - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - action: { type: String, allowedValues: ['view'] }, - id: { type: String, optional: true } - }).validate(data); - - switch (data.action) { - /* - case 'insert': - initInsertView(instance, data); - break; - */ - - case 'view': - initViewView(instance, data); - break; - - /* - case 'update': - initUpdateView(instance, data); - break; - - case 'remove': - initRemoveView(instance, data); - break; - */ - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.Message.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.Message.events({ - 'click .sm-field-group-display-context': function (event, instance) { - event.preventDefault(); - - let model = instance.state.get('model'); - let environment = Environments.findOne({ name: model.environment }); - let nodeId = model.display_context; - - Meteor.apply('inventoryFindNode?env&id', [ - environment.name, - nodeId, - ], { - wait: false - }, function (err, resp) { - if (err) { - console.error(R.toString(err)); - return; - } - - if (R.isNil(resp.node)) { - console.error('error finding node related to message', R.toString(nodeId)); - return; - } - - Router.go('environment', { - _id: idToStr(environment._id) - }, { - query: { - selectedNodeId: idToStr(resp.node._id) - } - }); - - }); - - }, - -}); - -/* - * Helpers - */ - -Template.Message.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - envsList: function () { - return Environments.find({}); - }, - - sourceSystemsList: function () { - return R.ifElse(R.isNil, R.always([]), R.prop('data') - )(Constants.findOne({ name: 'message_source_systems' })); - }, - - getAttrDisabled: function () { - let instance = Template.instance(); - let result = {}; - let action = instance.state.get('action'); - - if (R.contains(action, ['view', 'remove'])) { - result = R.assoc('disabled', true, result); - } - - return result; - }, - - getModel: function () { - let instance = Template.instance(); - return instance.state.get('model'); - }, - - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - getAttrSelected: function (optionValue, modelValue) { - let result = {}; - - if (optionValue === modelValue) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - getAttrSelectedMultiple: function (optionValue, modelValues) { - let result = {}; - - if (R.isNil(modelValues)) { return result; } - - if (R.contains(optionValue, modelValues)) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - }, - - argsInvPropDisplay: function (env, nodeId) { - return { - env: env, - nodeId: nodeId, - displayFn: (node) => { - if (R.isNil(node)) { return ''; } - return `${node.object_name} - ${node.type}`; - } - }; - }, -}); // end - helpers - - -function initViewView(instance, data) { - let reqId = parseReqId(data.id); - - instance.state.set('action', data.action); - //instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - instance.subscribe('messages?_id', reqId.id); - - Messages.find({ _id: reqId.id }).forEach((model) => { - instance.state.set('model', model); - }); - -} - -function subscribeToOptionsData(instance) { - instance.subscribe('environments_config'); - instance.subscribe('constants'); -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - case 'update': - return 'Update'; - default: - return 'Submit'; - } -} diff --git a/ui/imports/ui/components/message/message.styl b/ui/imports/ui/components/message/message.styl deleted file mode 100644 index 6003eb1..0000000 --- a/ui/imports/ui/components/message/message.styl +++ /dev/null @@ -1,41 +0,0 @@ -.os-message - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 120px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - input[disabled] - pointer-events: none - - .js-message-panel - margin-top: 20px; - - .sm-field-group-display-context - cursor: pointer; - diff --git a/ui/imports/ui/components/messages-info-box/messages-info-box.html b/ui/imports/ui/components/messages-info-box/messages-info-box.html deleted file mode 100644 index 0f89207..0000000 --- a/ui/imports/ui/components/messages-info-box/messages-info-box.html +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/ui/imports/ui/components/messages-info-box/messages-info-box.js b/ui/imports/ui/components/messages-info-box/messages-info-box.js deleted file mode 100644 index 69dace6..0000000 --- a/ui/imports/ui/components/messages-info-box/messages-info-box.js +++ /dev/null @@ -1,66 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: MessagesInfoBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './messages-info-box.html'; - -/* - * Lifecycles - */ - -Template.MessagesInfoBox.onCreated(function() { - var instance = this; - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - title: { type: String }, - count: { type: Number }, - lastScanTimestamp: { type: String, optional: true }, - icon: { type: String }, - colorClass: { type: String }, - onMoreDetailsReq: { type: Function }, - }).validate(data); - - }); -}); - -/* -Template.MessagesInfoBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MessagesInfoBox.events({ - 'click .sm-more-details-btn': function (event, instance) { - event.preventDefault(); - - let data = instance.data; - data.onMoreDetailsReq(); - } -}); - -/* - * Helpers - */ - -Template.MessagesInfoBox.helpers({ -}); - - diff --git a/ui/imports/ui/components/messages-info-box/messages-info-box.styl b/ui/imports/ui/components/messages-info-box/messages-info-box.styl deleted file mode 100644 index e69de29..0000000 diff --git a/ui/imports/ui/components/messages-list/messages-list.html b/ui/imports/ui/components/messages-list/messages-list.html deleted file mode 100644 index 646b2e9..0000000 --- a/ui/imports/ui/components/messages-list/messages-list.html +++ /dev/null @@ -1,103 +0,0 @@ - - diff --git a/ui/imports/ui/components/messages-list/messages-list.js b/ui/imports/ui/components/messages-list/messages-list.js deleted file mode 100644 index e6736b3..0000000 --- a/ui/imports/ui/components/messages-list/messages-list.js +++ /dev/null @@ -1,291 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: MessagesList - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { Counter } from 'meteor/natestrauser:publish-performant-counts'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import { Messages } from '/imports/api/messages/messages'; -import { Environments } from '/imports/api/environments/environments'; -import { idToStr } from '/imports/lib/utilities'; - -import '/imports/ui/components/pager/pager'; -import '/imports/ui/components/inventory-properties-display/inventory-properties-display'; - -import './messages-list.html'; - -/* - * Lifecycles - */ - -Template.MessagesList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null, - page: 1, - amountPerPage: 10, - sortField: 'timestamp', - sortDirection: -1, - messsages: [], - }); - - instance.autorun(function () { - //let data = Template.currentData(); - - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - }).validate(query); - - instance.subscribe('environments_config'); - instance.subscribe('messages/count'); - }); - - instance.autorun(function () { - let amountPerPage = instance.state.get('amountPerPage'); - let page = instance.state.get('page'); - let sortField = instance.state.get('sortField'); - let sortDirection = instance.state.get('sortDirection'); - - Meteor.apply('messages/get?level&env&page&amountPerPage&sortField&sortDirection', [ - null, null, page, amountPerPage, sortField, sortDirection - ], { - wait: false - }, function (err, res) { - if (err) { - console.error(R.toString(err)); - return; - } - - instance.state.set('messages', res); - }); - }); -}); - -/* -Template.MessagesList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MessagesList.events({ - 'click .sm-display-context-link': function (event, _instance) { - event.preventDefault(); - let envName = event.target.dataset.envName; - let nodeId = event.target.dataset.itemId; - - let environment = Environments.findOne({ name: envName }); - - Meteor.apply('inventoryFindNode?env&id', [ - environment.name, - nodeId, - ], { - wait: false - }, function (err, resp) { - if (err) { - console.error(R.toString(err)); - return; - } - - if (R.isNil(resp.node)) { - console.error('error finding node related to message', R.toString(nodeId)); - return; - } - - Router.go('environment', { - _id: idToStr(environment._id) - }, { - query: { - selectedNodeId: idToStr(resp.node._id) - } - }); - - }); - - }, - - 'click .sm-scan-id-link': function (event, _instance) { - event.preventDefault(); - let scanStartTimeStamp = moment(event.target.dataset.scanId).toDate(); - - Meteor.apply('scansFind?start-timestamp-before', [ - scanStartTimeStamp - ], { - wait: false - }, function (err, resp) { - if (err) { - console.error(R.toString(err)); - return; - } - - if (R.isNil(resp.scan)) { - console.error('error finding scan related to message', R.toString(scanStartTimeStamp)); - return; - } - - Router.go('scanning-request', { - _id: idToStr(resp.scan._id) - }, { - query: { - env: idToStr(resp.environment._id), - id: idToStr(resp.scan._id), - action: 'view' - } - }); - - }); - }, - - 'click .sm-table-header': function (event, instance) { - event.preventDefault(); - let isSortable = event.target.dataset.isSortable; - if (! isSortable ) { return; } - - let sortField = event.target.dataset.sortField; - let currentSortField = instance.state.get('sortField'); - let currentSortDirection = instance.state.get('sortDirection'); - - if (sortField === currentSortField) { - let sortDirection = null; - if (currentSortDirection === null) { - sortDirection = -1; - } else if (currentSortDirection === -1) { - sortDirection = 1; - } else if (currentSortDirection === 1) { - sortField = null; - sortDirection = null; - } else { - sortField = null; - sortDirection = null; - } - - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', sortDirection); - - } else { - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', -1); - } - }, -}); - -/* - * Helpers - */ - -Template.MessagesList.helpers({ - messages: function () { - let instance = Template.instance(); - return instance.state.get('messages'); - }, - - currentPage: function () { - let instance = Template.instance(); - return instance.state.get('page'); - }, - - amountPerPage: function () { - let instance = Template.instance(); - return instance.state.get('amountPerPage'); - }, - - totalMessages: function () { - return Counter.get(`messages/count`); - }, - - toIsoFormatStr: function (date) { - if (R.isNil(date)) { - return ''; - } - - let str = moment(date).format(); - return str; - }, - - argsPager: function (currentPage, amountPerPage, totalMessages) { - let instance = Template.instance(); - let totalPages = Math.ceil(totalMessages / amountPerPage); - - return { - disableNext: currentPage * amountPerPage > totalMessages, - disablePrev: currentPage == 1, - totalPages: totalPages, - currentPage: currentPage, - onReqNext: function () { - console.log('next'); - let page = (currentPage * amountPerPage > totalMessages) ? currentPage : currentPage + 1; - instance.state.set('page', page); - }, - onReqPrev: function () { - console.log('prev'); - let page = (currentPage == 1) ? currentPage : currentPage - 1; - instance.state.set('page', page); - }, - onReqFirst: function () { - console.log('req first'); - instance.state.set('page', 1); - }, - onReqLast: function () { - console.log('req last'); - instance.state.set('page', totalPages); - }, - onReqPage: function (pageNumber) { - console.log('req page'); - let page; - if (pageNumber <= 1) { - page = 1; - } else if (pageNumber > Math.ceil(totalMessages / amountPerPage)) { - page = totalPages; - } else { - page = pageNumber; - } - - instance.state.set('page', page); - }, - }; - }, - - fieldSortClass: function (fieldName) { - let instance = Template.instance(); - let classes = 'fa fa-sort'; - if (fieldName === instance.state.get('sortField')) { - let sortDirection = instance.state.get('sortDirection'); - if (sortDirection === -1) { - classes = 'fa fa-sort-desc'; - } else if (sortDirection === 1) { - classes = 'fa fa-sort-asc'; - } - } - - return classes; - }, - - argsInvPropDisplay: function (env, nodeId) { - return { - env: env, - nodeId: nodeId, - displayFn: (node) => { - if (R.isNil(node)) { return ''; } - return `${node.object_name} - ${node.type}`; - } - }; - }, -}); // end: helpers diff --git a/ui/imports/ui/components/messages-list/messages-list.styl b/ui/imports/ui/components/messages-list/messages-list.styl deleted file mode 100644 index adc9500..0000000 --- a/ui/imports/ui/components/messages-list/messages-list.styl +++ /dev/null @@ -1,37 +0,0 @@ -.os-messages-list - display: flex; - flex-flow: column nowrap; - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-messages-table - th - color: spark-blue - - a - color: spark-blue; - cursor: pointer; - i.fa - padding: 0px 3px; - font-size: small; - - .sm-action-bar - display: flex; - - a - color: spark-blue; - margin: 0px 5px; - cursor: pointer; - - .cl-action-icon - color: gray - - .sm-pager-section - display: flex; - justify-content: center; - - .cl-link - cursor: pointer diff --git a/ui/imports/ui/components/messages-modal/messages-modal.html b/ui/imports/ui/components/messages-modal/messages-modal.html deleted file mode 100644 index 292bc20..0000000 --- a/ui/imports/ui/components/messages-modal/messages-modal.html +++ /dev/null @@ -1,78 +0,0 @@ - - diff --git a/ui/imports/ui/components/messages-modal/messages-modal.js b/ui/imports/ui/components/messages-modal/messages-modal.js deleted file mode 100644 index 713e8e9..0000000 --- a/ui/imports/ui/components/messages-modal/messages-modal.js +++ /dev/null @@ -1,285 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: MessagesModal - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Counter } from 'meteor/natestrauser:publish-performant-counts'; -import * as R from 'ramda'; -//import { Messages } from '/imports/api/messages/messages'; -import { Environments } from '/imports/api/environments/environments'; -import { idToStr } from '/imports/lib/utilities'; - -import '/imports/ui/components/pager/pager'; - -import './messages-modal.html'; - -/* - * Lifecycles - */ - -Template.MessagesModal.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - messageLevel: 'info', - iconType: null, - listHeader: null, - envName: null, - page: 1, - amountPerPage: 10, - messages: [], - }); - - instance.autorun(function () { - - //let amountPerPage = instance.state.get('amountPerPage'); - //let page = instance.state.get('page'); - let envName = instance.state.get('envName'); - let messageLevel = instance.state.get('messageLevel'); - /* - - instance.subscribe('messages?env&level&page&amount', envName, messageLevel, page, amountPerPage); - */ - - if (R.isNil(envName)) { - instance.subscribe('messages/count?level', messageLevel); - } else { - instance.subscribe('messages/count?level&env', messageLevel, envName); - } - }); - - instance.autorun(function () { - let level = instance.state.get('messageLevel'); - let envName = instance.state.get('envName'); - let page = instance.state.get('page'); - let amountPerPage = instance.state.get('amountPerPage'); - - Meteor.apply('messages/get?level&env&page&amountPerPage&sortField&sortDirection', [ - level, envName, page, amountPerPage, null, null - ], { - wait: false - }, function (err, res) { - if (err) { - console.error(R.toString(err)); - return; - } - - instance.state.set('messages', res); - }); - }); -}); - -/* -Template.MessagesModal.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MessagesModal.events({ - 'show.bs.modal #messagesModalGlobal': function (event, instance) { - let data = event.relatedTarget.dataset; - setParams(data.messageLevel, data.envName, instance); - }, - - 'click .sm-display-context-link': function (event, instance) { - event.preventDefault(); - let envName = event.target.dataset.envName; - let nodeId = event.target.dataset.itemId; - - let environment = Environments.findOne({ name: envName }); - - Meteor.apply('inventoryFindNode?env&id', [ - environment.name, - nodeId, - ], { - wait: false - }, function (err, resp) { - if (err) { - console.error(R.toString(err)); - return; - } - - if (R.isNil(resp.node)) { - console.error('error finding node related to message', R.toString(nodeId)); - return; - } - - Router.go('environment', { - _id: idToStr(environment._id) - }, { - query: { - selectedNodeId: idToStr(resp.node._id) - } - }); - - instance.$('#messagesModalGlobal').modal('hide'); - - }); - - } -}); - -/* - * Helpers - */ - -Template.MessagesModal.helpers({ - iconType: function () { - let instance = Template.instance(); - return instance.state.get('iconType'); - }, - - listHeader: function () { - let instance = Template.instance(); - return instance.state.get('listHeader'); - }, - - envName: function () { - let instance = Template.instance(); - return instance.state.get('envName'); - }, - - messages: function () { - let instance = Template.instance(); - return instance.state.get('messages'); - }, - - currentPage: function () { - let instance = Template.instance(); - return instance.state.get('page'); - }, - - amountPerPage: function () { - let instance = Template.instance(); - return instance.state.get('amountPerPage'); - }, - - totalMessages: function () { - let instance = Template.instance(); - let level = instance.state.get('messageLevel'); - let env = instance.state.get('envName'); - - if (R.isNil(env)) { - return Counter.get(`messages/count?level=${level}`); - } else { - return Counter.get(`messages/count?level=${level}&env=${env}`); - } - }, - - argsPager: function (currentPage, amountPerPage, totalMessages) { - let instance = Template.instance(); - let totalPages = Math.ceil(totalMessages / amountPerPage); - - return { - disableNext: currentPage * amountPerPage > totalMessages, - disablePrev: currentPage == 1, - totalPages: totalPages, - currentPage: currentPage, - onReqNext: function () { - console.log('next'); - let page = (currentPage * amountPerPage > totalMessages) ? currentPage : currentPage + 1; - instance.state.set('page', page); - }, - onReqPrev: function () { - console.log('prev'); - let page = (currentPage == 1) ? currentPage : currentPage - 1; - instance.state.set('page', page); - }, - onReqFirst: function () { - console.log('req first'); - instance.state.set('page', 1); - }, - onReqLast: function () { - console.log('req last'); - instance.state.set('page', totalPages); - }, - onReqPage: function (pageNumber) { - console.log('req page'); - let page; - if (pageNumber <= 1) { - page = 1; - } else if (pageNumber > Math.ceil(totalMessages / amountPerPage)) { - page = totalPages; - } else { - page = pageNumber; - } - - instance.state.set('page', page); - }, - }; - }, - - argsInvPropDisplay: function (env, nodeId) { - return { - env: env, - nodeId: nodeId, - displayFn: (node) => { - if (R.isNil(node)) { return ''; } - return `${node.object_name} - ${node.type}`; - } - }; - }, -}); // end: helpers - -function setParams(messageLevel, envName, instance) { - instance.state.set('messageLevel', messageLevel); - instance.state.set('iconType', calcIconType(messageLevel)); - instance.state.set('listHeader', calcListHeader(messageLevel, envName)); - instance.state.set('envName', envName); - instance.state.set('page', 1); -} - -function calcIconType(messageLevel) { - switch (messageLevel) { - case 'notify': - return 'notifications'; - case 'info': - return 'notifications'; - case 'warning': - return 'warning'; - case 'error': - return 'error'; - default: - throw 'unimplemented message level for icon'; - } -} - -function calcListHeader(messageLevel, envName) { - let header; - - switch (messageLevel) { - case 'notify': - header = 'List of notifications'; - break; - case 'info': - header = 'List of info messages'; - break; - case 'warning': - header = 'List of warnings'; - break; - case 'error': - header = 'List of errors'; - break; - default: - throw 'unimplemented message level for list header'; - } - - if (! R.isNil(envName)) { - header = header + ` for environment ${envName}.`; - } - - return header; -} diff --git a/ui/imports/ui/components/messages-modal/messages-modal.styl b/ui/imports/ui/components/messages-modal/messages-modal.styl deleted file mode 100644 index ec12941..0000000 --- a/ui/imports/ui/components/messages-modal/messages-modal.styl +++ /dev/null @@ -1,18 +0,0 @@ -.os-messages-modal - - .cl-link - cursor: pointer - - .modal-dialog - display: flex; - flex-flow: column nowrap; - - .sm-messages-table - table-layout: fixed; - - .sm-message-row - word-break: break-all; - - .sm-pager-section - display: flex; - justify-content: center; diff --git a/ui/imports/ui/components/mt-input/mt-input.html b/ui/imports/ui/components/mt-input/mt-input.html deleted file mode 100644 index c7803f4..0000000 --- a/ui/imports/ui/components/mt-input/mt-input.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/ui/imports/ui/components/mt-input/mt-input.js b/ui/imports/ui/components/mt-input/mt-input.js deleted file mode 100644 index 729adb9..0000000 --- a/ui/imports/ui/components/mt-input/mt-input.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Template Component: MtInput - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './mt-input.html'; - -/* - * Lifecycles - */ - -Template.MtInput.onCreated(function() { - let instance = this; - - instance.autorun(function () { - let data = Template.currentData(); - - //simple schema does not support input value type of: number or string together. - data = R.dissoc('inputValue', data); - - instance.autorun(function () { - new SimpleSchema({ - inputType: { type: String }, - classStr: { type: String, optional: true }, - placeholder: { type: String, optional: true }, - isDisabled: { type: Boolean, optional: true }, - onInput: { type: Object, blackbox: true }, - }).validate(data); - }); - }); - - instance.autorun(function () { - let data = Template.currentData(); - - instance.onInput = function (value) { - R.when(R.pipe(R.isNil, R.not), x => x(value))(R.path(['onInput', 'fn'], data)); - }; - }); -}); - -/* -Template.MtInput.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MtInput.events({ - 'input .input-field': function (event, instance) { - if (event.target.type === 'checkbox') { return; } - - let value = R.cond([ - [R.equals('number'), R.always(event.target.valueAsNumber)], - [R.T, R.always(event.target.value)], - ])(event.target.type); - - instance.onInput(value); - }, - - 'click .input-field': function (event, instance) { - if (event.target.type !== 'checkbox') { return; } - - let element = instance.$('.input-field')[0]; - instance.onInput(element.checked); - } -}); - -/* - * Helpers - */ - -Template.MtInput.helpers({ - attrsInput: function (inputType, placeholder, isDisabled) { - let attrs = {}; - - if (hasPlaceholder(inputType, placeholder)) { - attrs = R.assoc('placeholder', placeholder, attrs); - } - - if (isDisabled) { - attrs = R.assoc('disabled', 'disabled', attrs); - } - - return attrs; - }, - -}); // end: helpers - -function hasPlaceholder(inputType, placeholder) { - if (R.contains(inputType, ['checkbox', 'select'])) { - return false; - } - - if (R.isNil(placeholder)) { - return false; - } - - return true; -} diff --git a/ui/imports/ui/components/mt-input/mt-input.styl b/ui/imports/ui/components/mt-input/mt-input.styl deleted file mode 100644 index 3638a14..0000000 --- a/ui/imports/ui/components/mt-input/mt-input.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "MtInput" diff --git a/ui/imports/ui/components/mt-radios/mt-radios.html b/ui/imports/ui/components/mt-radios/mt-radios.html deleted file mode 100644 index 23fa3d8..0000000 --- a/ui/imports/ui/components/mt-radios/mt-radios.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/ui/imports/ui/components/mt-radios/mt-radios.js b/ui/imports/ui/components/mt-radios/mt-radios.js deleted file mode 100644 index a8f7f7c..0000000 --- a/ui/imports/ui/components/mt-radios/mt-radios.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Template Component: MtRadios - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; - -import './mt-radios.html'; - -/* - * Lifecycles - */ - -Template.MtRadios.onCreated(function() { - let instance = this; - - instance.autorun(function () { - let data = Template.currentData(); - - instance.onInput = function (value) { - R.when(R.pipe(R.isNil, R.not), x => x(value))(R.path(['onInput', 'fn'], data)); - }; - }); -}); - -/* -Template.MtRadios.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MtRadios.events({ - 'click .cl-mt-radio-input': function (event, instance) { - event.preventDefault(); - event.stopPropagation(); - - instance.onInput(event.target.value); - }, -}); - -/* - * Helpers - */ - -Template.MtRadios.helpers({ - attrsInput: function (inputValue, selectedValue) { - let attrs = {}; - - if (inputValue === selectedValue) { - attrs = R.assoc('checked', 'checked', attrs); - } - - return attrs; - }, -}); // end: helpers - - diff --git a/ui/imports/ui/components/mt-radios/mt-radios.styl b/ui/imports/ui/components/mt-radios/mt-radios.styl deleted file mode 100644 index 868d2c0..0000000 --- a/ui/imports/ui/components/mt-radios/mt-radios.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "MtRadios" diff --git a/ui/imports/ui/components/mt-select/mt-select.html b/ui/imports/ui/components/mt-select/mt-select.html deleted file mode 100644 index cce8973..0000000 --- a/ui/imports/ui/components/mt-select/mt-select.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/ui/imports/ui/components/mt-select/mt-select.js b/ui/imports/ui/components/mt-select/mt-select.js deleted file mode 100644 index 95190e2..0000000 --- a/ui/imports/ui/components/mt-select/mt-select.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Template Component: MtSelect - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './mt-select.html'; - -/* - * Lifecycles - */ - -Template.MtSelect.onCreated(function() { - let instance = this; - - instance.autorun(function () { - let data = Template.currentData(); - - instance.autorun(function () { - new SimpleSchema({ - classStr: { type: String, optional: true }, - selectedValue: { type: String, optional: true }, - isDisabled: { type: Boolean, optional: true }, - options: { type: [Object], blackbox: true }, - onInput: { type: Object, blackbox: true }, - size: { type: Number, optional: true }, - }).validate(data); - }); - }); - - instance.autorun(function () { - let data = Template.currentData(); - - instance.onInput = function (value) { - R.when(R.pipe(R.isNil, R.not), x => x(value))(R.path(['onInput', 'fn'], data)); - }; - }); -}); - -/* -Template.MtSelect.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.MtSelect.events({ - 'change .sm-mt-select': function (event, instance) { - event.preventDefault(); - event.stopPropagation(); - - let value = R.pipe(R.head, R.prop('value'))(event.target.selectedOptions); - instance.onInput(value); - }, -}); - -/* - * Helpers - */ - -Template.MtSelect.helpers({ - attrsSelect: function (isDisabled, size) { - let attrs = {}; - if (isDisabled) { - attrs = R.assoc('disabled', 'disabled', attrs); - } - - if (size) { - attrs = R.assoc('size', size, attrs); - } - - return attrs; - }, - - attrOptSelected: function (currentValue, selectedValue) { - let attrs = {}; - if (currentValue === selectedValue) { - attrs = R.assoc('selected', 'selected', attrs); - } - return attrs; - }, - -}); // helpers - - diff --git a/ui/imports/ui/components/mt-select/mt-select.styl b/ui/imports/ui/components/mt-select/mt-select.styl deleted file mode 100644 index e0ff8ca..0000000 --- a/ui/imports/ui/components/mt-select/mt-select.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "MtSelect" diff --git a/ui/imports/ui/components/network-graph-manager/network-graph-manager.html b/ui/imports/ui/components/network-graph-manager/network-graph-manager.html deleted file mode 100644 index 845db7c..0000000 --- a/ui/imports/ui/components/network-graph-manager/network-graph-manager.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/ui/imports/ui/components/network-graph-manager/network-graph-manager.js b/ui/imports/ui/components/network-graph-manager/network-graph-manager.js deleted file mode 100644 index 5cd4f35..0000000 --- a/ui/imports/ui/components/network-graph-manager/network-graph-manager.js +++ /dev/null @@ -1,436 +0,0 @@ -/* - * Template Component: NetworkGraphManager - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { Cliques } from '/imports/api/cliques/cliques.js'; -import { Links } from '/imports/api/links/links.js'; -import * as R from 'ramda'; -import { store } from '/imports/ui/store/store'; -import { activateGraphTooltipWindow } from '/imports/ui/actions/graph-tooltip-window.actions'; -import { closeGraphTooltipWindow } from '/imports/ui/actions/graph-tooltip-window.actions'; -//import { activateVedgeInfoWindow } from '/imports/ui/actions/vedge-info-window.actions'; -import { EJSON } from 'meteor/ejson'; - -import '/imports/ui/components/network-graph/network-graph'; - -import './network-graph-manager.html'; - -/* - * Lifecycles - */ - -Template.NetworkGraphManager.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id_path: null, - graphDataChanged: null, - isReady: false, - inventoriesToFind: [], - cliquesToFind: [], - linksToFind: [], - nodesToFind: [], - graphLinks: [], - graphNodes: [], - }); - - instance.simpleState = { - graphData: { - links: [], - nodes: [], - groups: [], - }, - itemOfInterest: null - }; - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - id_path: { type: String }, - }).validate(data); - - instance.state.set('id_path', data.id_path); - }); - - instance.autorun(function () { - let id_path = instance.state.get('id_path'); - - instance.simpleState.graphData = generateGraphData(); - instance.state.set('graphDataChanged', null); - instance.state.set('isReady', false); - instance.state.set('inventoriesToFind', []); - instance.state.set('cliquesToFind', []); - instance.state.set('linksToFind', []); - instance.state.set('nodesToFind', []); - instance.state.set('graphLinks', []); - instance.state.set('graphNodes', []); - - //instance.subscribe('attributes_for_hover_on_data'); - //subscribeToNodeAndRelatedData(id_path, instance, instance.simpleState); - instance.state.set('inventoriesToFind', [id_path]); - }); - - instance.autorun(function () { - let inventories = instance.state.get('inventoriesToFind'); - if (inventories.length <= 0) { - return; - } - - instance.subscribe('inventory?id_path', inventories[0]); - - // id_path: assumption - unique - Inventory.find({ id_path: inventories[0] }).forEach((inventory) => { - if (! inventory.clique) { - return; - } - - instance.state.set('cliquesToFind', [inventory._id]); - }); - }); - - instance.autorun(function () { - let cliques = instance.state.get('cliquesToFind'); - if (cliques.length <= 0) { - return; - } - - // focal point: assumption - unique per inventory node. - let mainNodeIdStr = cliques[0]._str; - instance.subscribe('cliques?focal_point', mainNodeIdStr); - - Cliques.find({ focal_point: new Mongo.ObjectID(mainNodeIdStr) }).forEach( function (cliqueItem) { - instance.state.set('linksToFind', cliqueItem.links); - }); - }); - - instance.autorun(function () { - let linksToFind = instance.state.get('linksToFind'); - if (linksToFind.length <= 0) { - return; - } - - // Find links for focal point. - instance.subscribe('links?_id-in', linksToFind); - - Links.find({ _id: {$in: linksToFind} }).forEach(function(link) { - let graphLinks = EJSON.parse(instance.state.keys['graphLinks']); - graphLinks = R.concat([link], graphLinks); - instance.state.set('graphLinks', graphLinks); - }); - }); - - instance.autorun(function () { - let graphLinks = instance.state.get('graphLinks'); - if (graphLinks.length <= 0) { - return; - } - - instance.simpleState.graphData = addLinksToGraph(graphLinks, instance.simpleState.graphData); - instance.state.set('graphDataChanged', Date.now()); - - // Find nodes for link - // todo: remove dubplicates. - let nodesIds = R.chain(link => { - return [ link['source'], link['target'] ]; - }, graphLinks); - - let nodesToFind = EJSON.parse(instance.state.keys['nodesToFind']); - nodesToFind = R.concat(nodesIds, nodesToFind); - instance.state.set('nodesToFind', nodesToFind); - }); - - instance.autorun(function () { - let nodesToFind = instance.state.get('nodesToFind'); - if (nodesToFind.length <= 0) { - return; - } - - instance.subscribe('inventory?_id-in', nodesToFind); - - Inventory.find({ _id: { $in: nodesToFind } }).forEach(function (node) { - let graphNodes = EJSON.parse(instance.state.keys['graphNodes']); - graphNodes = R.concat([node], graphNodes); - instance.state.set('graphNodes', graphNodes); - }); - - }); - - instance.autorun(function () { - let graphNodes = instance.state.get('graphNodes'); - if (graphNodes.length <= 0) { - return; - } - - instance.simpleState.graphData = addNodesToGraph(graphNodes, instance.simpleState.graphData); - - let isReady = calcIsReady(instance.simpleState.graphData); - instance.state.set('graphDataChanged', Date.now()); - instance.state.set('isReady', isReady); - }); -}); - -/* -Template.NetworkGraphManager.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.NetworkGraphManager.events({ -}); - -/* - * Helpers - */ - -Template.NetworkGraphManager.helpers({ - graphDataChanged: function () { - let instance = Template.instance(); - return instance.state.get('graphDataChanged'); - }, - - argsNetworkGraph: function (_graphDataChanged) { - let instance = Template.instance(); - let graphData = instance.simpleState.graphData; - let isDragging = false; - - return { - graphData: graphData, - onNodeOver: function (nodeId, x, y) { - if (isDragging) { - return; - } - - if (instance.simpleState.itemOfInterest === nodeId) { - instance.simpleState.itemOfInterest = null; - return; - } - - instance.simpleState.itemOfInterest = nodeId; - - Meteor.apply('inventoryFindNode?DataAndAttrs', [ nodeId ], - { wait: false }, function (err, res) { - if (err) { - console.error(`error fetching attrs for node for showing: ${R.toString(err)}`); - return; - } - - store.dispatch( - activateGraphTooltipWindow(res.nodeName, res.attributes, x + 30, y - 10)); - }); - }, - onNodeOut: function (_nodeId) { - //store.dispatch(closeGraphTooltipWindow()); - }, - onNodeClick: function (_nodeId) { - }, - onDragStart: function () { - isDragging = true; - store.dispatch(closeGraphTooltipWindow()); - }, - onDragEnd: function () { - isDragging = false; - }, - onGroupOver: function () { - //instance.simpleState.itemOfInterest = null; - //store.dispatch(closeGraphTooltipWindow()); - }, - onLinkOver: function (linkId, x, y) { - if (isDragging) { - return; - } - - if (instance.simpleState.itemOfInterest === linkId) { - instance.simpleState.itemOfInterest = null; - return; - } - - instance.simpleState.itemOfInterest = linkId; - - Meteor.apply('linksFind?DataAndAttrs', [ linkId ], - { wait: false }, function (err, res) { - if (err) { - console.error(`error fetching attrs for link for showing: ${R.toString(err)}`); - return; - } - - store.dispatch( - activateGraphTooltipWindow(res.linkName, res.attributes, x - 30, y - 10)); - }); - }, - }; - }, - - isReady: function () { - let instance = Template.instance(); - return instance.state.get('isReady'); - } -}); // end: helpers - -function generateGraphData() { - return { - nodes: [], - links: [], - groups: [], - }; -} - -function genGraphLink(link) { - let newLink = { - sourceId: link.source, - targetId: link.target, - label: link.link_name, - _osid: link._id, - _osmeta: { - status: link.status, - linkId: link._id - } - }; - - return newLink; -} - -function addLinksToGraph(linksInfo, graphData) { - let newLinks = R.map(link => genGraphLink(link), linksInfo); - - let links = R.unionWith(R.eqBy(R.prop('_osid')), graphData.links, newLinks); - links = expandLinks(links, graphData.nodes); - - return R.merge(graphData, { - links: links - }); -} - -/* -function addLinkToGraph(link, graphData) { - let newLink = genGraphLink(link); - - let links = R.unionWith(R.eqBy(R.prop('_osid')), graphData.links, [newLink]); - links = expandLinks(links, graphData.nodes); - - return R.merge(graphData, { - links: links - }); -} -*/ - -function expandLinks(links, nodes) { - return R.map((link) => { - let newLink = link; - - let nodeSource = R.find(R.propEq('_osid', newLink.sourceId), nodes); - if (!R.isNil(nodeSource)) { - newLink = R.assoc('source', nodeSource, newLink); - } - - let nodeTarget = R.find(R.propEq('_osid', newLink.targetId), nodes); - if (!R.isNil(nodeTarget)) { - newLink = R.assoc('target', nodeTarget, newLink); - } - - return newLink; - }, links); -} - -function genGraphNode(node) { - let newNode = { - _osid: node._id, - _osmeta: { - type: node.type, - nodeId: node._id, - status: node.status, - }, - width: 60, - height: 40, - name: node._id._str, - }; - - let groupMarkers = ['host', 'switch']; - let groupKey = R.find((key) => { - if (R.isNil(R.path([key], node))) { return false; } - return true; - })(groupMarkers); - if (groupKey) { - newNode = R.assocPath(['_osmeta', 'groupId'], node[groupKey], newNode); - newNode = R.assocPath(['_osmeta', 'groupType'], groupKey, newNode); - } - - return newNode; -} - -function addNodesToGraph(nodesInfo, graphData) { - let newNodes = R.map((node) => genGraphNode(node), nodesInfo); - - let nodes = R.unionWith(R.eqBy(R.prop('_osid')), graphData.nodes, newNodes); - let links = expandLinks(graphData.links, nodes); - let groups = calcGroups(nodes); - - return R.merge(graphData, { - nodes: nodes, - links: links, - groups: groups, - }); -} - -/* -function addNodeToGraph(node, graphData) { - let newNode = genGraphNode(node); - - let nodes = R.unionWith(R.eqBy(R.prop('_osid')), graphData.nodes, [newNode]); - let links = expandLinks(graphData.links, nodes); - let groups = calcGroups(nodes); - - return R.merge(graphData, { - nodes: nodes, - links: links, - groups: groups, - }); -} -*/ - -function calcIsReady(graphData) { - return R.all((link) => { - return (!(R.isNil(link.source) || R.isNil(link.target))); - }, graphData.links); -} - -function calcGroups(nodes) { - return R.reduce((accGroups, node) => { - let groupId = R.path(['_osmeta', 'groupId'], node); - if (R.isNil(groupId)) { - return accGroups; - } - - let groupIndex = R.findIndex(R.propEq('_osid', groupId), accGroups); - let group = null; - if (groupIndex < 0) { - let group = { - _osid: groupId, - leaves: [node], - isExpanded: true, - name: groupId, - type: node._osmeta.groupType, - }; - accGroups = R.append(group, accGroups); - - } else { - let group = accGroups[groupIndex]; - group = R.merge(group, { - leaves: R.append(node, group.leaves) - }); - accGroups = R.update(groupIndex, group, accGroups); - } - - node.parent = group; - return accGroups; - }, [], nodes); -} diff --git a/ui/imports/ui/components/network-graph-manager/network-graph-manager.styl b/ui/imports/ui/components/network-graph-manager/network-graph-manager.styl deleted file mode 100644 index 1df8d2f..0000000 --- a/ui/imports/ui/components/network-graph-manager/network-graph-manager.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "NetworkGraphManager" diff --git a/ui/imports/ui/components/network-graph/network-graph.html b/ui/imports/ui/components/network-graph/network-graph.html deleted file mode 100644 index e68141a..0000000 --- a/ui/imports/ui/components/network-graph/network-graph.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/ui/imports/ui/components/network-graph/network-graph.js b/ui/imports/ui/components/network-graph/network-graph.js deleted file mode 100644 index 04b69e3..0000000 --- a/ui/imports/ui/components/network-graph/network-graph.js +++ /dev/null @@ -1,803 +0,0 @@ -/* - * Template Component: NetworkGraph - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; -import * as cola from 'webcola'; -import { imagesForNodeType, defaultNodeTypeImage } from '/imports/lib/images-for-node-type'; -import * as _ from 'lodash'; - -import './network-graph.html'; - -/* - * Lifecycles - */ - -Template.NetworkGraph.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - graphDataChanged: null, - }); - instance.simpleState = { - graphData: null - }; - instance.prevForce = null; - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - graphData: { type: Object, blackbox: true }, - onNodeOver: { type: Function, optional: true }, - onNodeOut: { type: Function, optional: true }, - onNodeClick: { type: Function, optional: true }, - onDragStart: { type: Function, optional: true }, - onDragEnd: { type: Function, optional: true }, - onGroupOver: { type: Function, optional: true }, - onLinkOver: { type: Function, optional: true }, - }).validate(data); - - instance.simpleState.graphData = data.graphData; - instance.state.set('graphDataChanged', Date.now()); - instance.onNodeOver = R.defaultTo(() => {}, data.onNodeOver); - instance.onNodeOut = R.defaultTo(() => {}, data.onNodeOut); - instance.onNodeClick = R.defaultTo(() => {}, data.onNodeClick); - instance.onDragStart = R.defaultTo(() => {}, data.onDragStart); - instance.onDragEnd = R.defaultTo(() => {}, data.onDragEnd); - instance.onGroupOver = R.defaultTo(() => {}, data.onGroupOver); - instance.onLinkOver = R.defaultTo(() => {}, data.onLinkOver); - }); -}); - -Template.NetworkGraph.rendered = function() { - let instance = Template.instance(); - - instance.autorun(function () { - //let _graphDataChanged = - instance.state.get('graphDataChanged'); - let graphEl = instance.$('.sm-graph')[0]; - - renderGraph(graphEl, - graphEl.clientWidth, - graphEl.clientHeight, - instance.simpleState.graphData, - genConfig(), - instance.onNodeOver, - instance.onNodeOut, - instance.onNodeClick, - instance.onDragStart, - instance.onDragEnd, - instance.onGroupOver, - instance.onLinkOver, - function onNewForce(newForce) { - if (instance.prevForce) { - instance.prevForce.stop(); - } - instance.prevForce = newForce; - } - ); - }); -}; - -Template.NetworkGraph.onDestroyed(function () { - let instance = Template.instance(); - let graphEl = instance.$('.sm-graph')[0]; - let svg = d3.select(graphEl).select('svg'); - if (instance.prevForce) { - instance.prevForce.stop(); - } - - svg.remove(); -}); -/* - * Events - */ - -Template.NetworkGraph.events({ -}); - -/* - * Helpers - */ - -Template.NetworkGraph.helpers({ -}); // end: helpers - - -function genConfig() { - let outline = false; - let tocolor = 'fill'; - let towhite = 'stroke'; - if (outline) { - tocolor = 'stroke'; - towhite = 'fill'; - } - - return { - initialLinkLabelsFontSize: 18, - tocolor: tocolor, - towhite: towhite, - text_center: false, - outline: outline, - min_score: 0, - max_score: 1, - highlight_color: 'blue', - highlight_trans: 0.1, - default_node_color: '#ccc', - //var default_node_color: 'rgb(3,190,100)', - default_link_color: '#888', - nominal_base_node_size: 8, - nominal_text_size: 10, - max_text_size: 24, - nominal_stroke: 1.5, - max_stroke: 4.5, - max_base_node_size: 36, - min_zoom: 0.3, - max_zoom: 5, - }; -} - -function renderGraph( - mainElement, - w, - h, - graph, - config, - onNodeOver, - onNodeOut, - onNodeClick, - onDragStart, - onDragEnd, - onGroupOver, - onLinkOver, - onNewForce -) { - - let force = genForceCola(cola, d3, w, h); - onNewForce(force); - - let drag = force.drag() - .on('start', function (_d) { - onDragStart(); - }) - .on('end', function (_d) { - onDragEnd(); - }) - ; - - let svg = d3.select(mainElement).select('svg'); - svg.remove(); - svg = genSvg(d3, mainElement); - - let zoom = genZoomBehavior(d3, config); - svg.call(zoom); - - let mainEl = svg.append('g'); - let groupsEl = mainEl.append('g').attr('class', 'groups-container'); - let linksEl = mainEl.append('g').attr('class', 'links-container'); - let nodesEl = mainEl.append('g').attr('class', 'nodes-container'); - - renderView(force, { - graph: graph, - viewGraph: { - nodes: [], - links: [], - groups: [] - }, - }, - mainEl, - groupsEl, - nodesEl, - linksEl, - drag, zoom, config, - onNodeOver, - onNodeOut, - onNodeClick, - onGroupOver, - onLinkOver - ); -} - -// d3.select(window).on('resize', resize); - -function genSvg(d3, mainElement) { - let svg = d3.select(mainElement).append('svg'); - - svg.style('cursor', 'move') - .attr('width', '100%') - .attr('height', '100%') - .attr('pointer-events', 'all'); - - return svg; -} - -function genSvgLinks( - g, - links, - nominal_stroke, - default_link_color, - initialLinkLabelsFontSize, - onLinkOver -) { - let svgLinks = g.selectAll('.link-group') - .data(links, (d) => d._osid); - - let svgLinksEnter = svgLinks - .enter() - .append('g') - .attr('class', 'link-group') - .attr('data-link-id', function (d) { - return d._osid; - }) - ; - - //let svgLinksExit = - svgLinks - .exit().remove(); - - let svgLinkLines = svgLinksEnter - .append('line') - .attr('class', 'link-line') - .style('stroke-width', nominal_stroke) - .style('stroke', - function(d) { - let status = R.defaultTo('', R.path(['_osmeta', 'status'], d)); - status = _.toLower(status); - switch(status) { - case 'ok': - return 'green'; - case 'warning': - return 'orange'; - case 'error': - return 'red'; - default: - return default_link_color; - } - }) - .on('mouseover', function (d) { - onLinkOver(d._osmeta.linkId, d3.event.pageX, d3.event.pageY); - }) - ; - - let svgLinkLabels = svgLinksEnter - .append('text') - .text(function(d) { - return d.label; - }) - .attr('class', 'link-label') - .attr('x', function(d) { return (d.source.x + (d.target.x - d.source.x) * 0.5); }) - .attr('y', function(d) { return (d.source.y + (d.target.y - d.source.y) * 0.5); }) - .attr('dy', '.25em') - .attr('text-anchor', 'right') - .attr('font-size', initialLinkLabelsFontSize) - ; - - return {svgLinks, svgLinkLines, svgLinkLabels}; -} - -function genSvgNodes(g, nodes, drag, onNodeOver, onNodeOut, onNodeClick, onGroupNodeClick) { - let svgNodes = g.selectAll('.node') - .data(nodes, (d) => d._osid); - - let svgNodesEnter = svgNodes - .enter() - .append('g') - .attr('class', 'node') - .attr('data-node-id', (d) => d._osid) - .call(drag); - - //let svgNodesExit = - svgNodes - .exit().remove(); - - let imageLength = 36; - let svgImages = svgNodesEnter.append('image') - .attr('class', 'node-image') - .attr('xlink:href', function(d) { - let status = R.defaultTo('', R.path(['_osmeta', 'status'], d)); - status = _.toLower(status); - return `/${calcImageForNodeType(d._osmeta.type, status)}`; - }) - .attr('x', -(Math.floor(imageLength / 2))) - .attr('y', -(Math.floor(imageLength / 2))) - .attr('width', imageLength) - .attr('height', imageLength) - .on('mouseover', function (d) { - onNodeOver(d._osmeta.nodeId, d3.event.pageX, d3.event.pageY); - }) - .on('mouseout', function (d) { - onNodeOut(d._osmeta.nodeId); - }) - .on('click', function (d) { - let type = R.defaultTo('', R.path(['_osmeta', 'type'], d)); - if (R.contains(type, ['view_group-host', 'view_group-switch'])) { - onGroupNodeClick(d._osmeta.nodeId); - } - onNodeClick(d._osmeta.nodeId); - }) - ; - - return {svgNodes, svgImages}; - //return [svgNodes]; -} - -function calcImageForNodeType(nodeType, status) { - let image = R.defaultTo(defaultNodeTypeImage, R.prop(nodeType, imagesForNodeType)); - if (typeof image === 'object') { - image = R.defaultTo(image.default, image[status]); - } - - return image; -} - -function genZoomBehavior(d3, config) { - let zoom = d3.zoom().scaleExtent([config.min_zoom, config.max_zoom]); - - return zoom; -} - -/* -function genForceD3(d3, w, h) { - let force = d3.layout.force() - .linkDistance(60) - .charge(-300) - .size([w,h]); - - return force; -} -*/ - -function genForceCola(cola, d3, w, h) { - let force = cola.d3adaptor(d3) - .convergenceThreshold(0.1) - //.convergenceThreshold(1e-9) - .linkDistance(120) - .size([w,h]); - - return force; -} - -function activateForce(force, nodes, links, groups) { - force - .nodes(nodes) - .links(links) - .groups(groups) - //.symmetricDiffLinkLengths(25) - .handleDisconnected(true) - .avoidOverlaps(true) - .start(50, 100, 200); - //.start(); -} - -/* -function resize() { - let width = mainElement.clientWidth; - let height = mainElement.clientHeight; - - svg.attr('width', '100%') //width) - .attr('height', '100%'); //height); - - force.size([ - force.size()[0] + (width - w) / zoom.scale(), - force.size()[1] + (height - h) / zoom.scale() - ]).resume(); - - w = width; - h = height; -} -*/ - -function renderView(force, - state, - mainEl, - groupsEl, - nodesEl, - linksEl, - drag, - zoom, - config, - onNodeOver, - onNodeOut, - onNodeClick, - onGroupOver, - onLinkOver -) { - - state.viewGraph = calcViewGraph(state.graph, state.viewGraph); - - activateForce(force, state.viewGraph.nodes, state.viewGraph.links, state.viewGraph.groups); - - zoom.on('zoom', zoomFn); - - genSvgGroups(groupsEl, state.viewGraph.groups, drag, onRenderViewReq, onGroupOver); - - genSvgLinks( - linksEl, state.viewGraph.links, - config.nominal_stroke, - config.default_link_color, - config.initialLinkLabelsFontSize, - onLinkOver - ); - - genSvgNodes( - nodesEl, state.viewGraph.nodes, drag, onNodeOver, onNodeOut, onNodeClick, - function onGroupNodeClick(groupId) { - let group = R.find(R.propEq('_osid', groupId), state.graph.groups); - group.isExpanded = true; - - state.viewGraph = renderView(force, state, - mainEl, groupsEl, nodesEl, linksEl, - drag, zoom, config, - onNodeOver, onNodeOut, onNodeClick, onGroupOver, onLinkOver); - }); - - force.on('tick', tickFn); - - function onRenderViewReq() { - state.viewGraph = renderView(force, state, - mainEl, groupsEl, nodesEl, linksEl, - drag, zoom, config, - onNodeOver, onNodeOut, onNodeClick, onGroupOver, onLinkOver); - } - - function tickFn() { - let svgGroups = mainEl.selectAll('.group'); - svgGroups - .attr('transform', function (d) { - let x = R.path(['bounds', 'x'], d); - let y = R.path(['bounds', 'y'], d); - return `translate(${x},${y})`; - }) - ; - /* - .attr('x', function (d) { - return R.path(['bounds', 'x'], d); - }) - .attr('y', function (d) { - return R.path(['bounds', 'y'], d); - }) - */ - - svgGroups.selectAll('.group-shape') - .attr('width', function (d) { - if (d.bounds) { return d.bounds.width(); } - }) - .attr('height', function (d) { - if (d.bounds) { return d.bounds.height(); } - }); - - svgGroups.selectAll('.group-name') - .attr('x', function(d) { - return (d.bounds.width() / 2); - }) - .attr('y', function(_d) { - return 30; - }) - ; - - let svgNodes = mainEl.selectAll('.node'); - svgNodes.attr('transform', function(d) { - return 'translate(' + d.x + ',' + d.y + ')'; - }); - - let svgLinkLines = mainEl.selectAll('.link-group').selectAll('.link-line'); - svgLinkLines - .attr('x1', function(d) { - return d.source.x; - }) - .attr('y1', function(d) { return d.source.y; }) - .attr('x2', function(d) { return d.target.x; }) - .attr('y2', function(d) { return d.target.y; }); - - let svgLinkLabels = mainEl.selectAll('.link-group').selectAll('.link-label'); - svgLinkLabels - .attr('x', function(d) { - return (d.source.x + (d.target.x - d.source.x) * 0.5); - }) - .attr('y', function(d) { - return (d.source.y + (d.target.y - d.source.y) * 0.5); - }); - - } - - function zoomFn() { - mainEl.attr('transform', d3.event.transform); - - let trn = d3.event.transform; - - let maxZoomAllowedForNodes = 1.8; - let imageInitialLength = 36; - let imageLength; - - if (trn.k > maxZoomAllowedForNodes) { - imageLength = (imageInitialLength / trn.k) * maxZoomAllowedForNodes; - } else { - imageLength = imageInitialLength; - } - - let svgImages = mainEl.selectAll('.node-image'); - svgImages - .attr('x', -(Math.floor(imageLength / 2))) - .attr('y', -(Math.floor(imageLength / 2))) - .attr('width', imageLength) - .attr('height', imageLength) - ; - - let labelsFontSize; - - if (trn.k > maxZoomAllowedForNodes) { - labelsFontSize = (config.initialLinkLabelsFontSize / trn.k) * maxZoomAllowedForNodes; - } else { - labelsFontSize = config.initialLinkLabelsFontSize; - } - - let svgLinkLabels = mainEl.selectAll('.link-group').selectAll('.link-label'); - svgLinkLabels - .attr('font-size', labelsFontSize); - } - - return state.viewGraph; -} - -function genSvgGroups(g, groups, drag, onRenderViewReq, onGroupOver) { - let svgGroups = g.selectAll('.group') - .data(groups, (d) => d._osid); - - let enterGroups = svgGroups.enter(); - - let groupsContainers = - enterGroups - .append('g') - .attr('class', 'group') - .attr('data-group-id', (d) => d._osid) - .call(drag) - .on('mouseover', function (_d) { - onGroupOver(); - }) - .on('click', function (d) { - console.log('click', d); - d.isExpanded = !d.isExpanded; - onRenderViewReq(); - }); - - groupsContainers - .append('rect') - .attr('class', 'group-shape') - .attr('rx', 8) - .attr('ry', 8) - .style('fill', function (_d, _i) { return 'lightblue'; }) - ; - - groupsContainers - .append('text') - .text(function(d) { - return d.name; - }) - .attr('class', 'group-name') - .attr('x', function(d) { - return (d.bounds.width() / 2); - }) - .attr('y', function(_d) { - return 30; - }) - .attr('dy', '.25em') - .attr('text-anchor', 'middle') - .attr('font-size', 20) - ; - - svgGroups.exit() - .remove(); - - return svgGroups; -} -function calcViewGraph(graph, prevViewGraph) { - let {groups, rejectedGroups} = calcGroupsAndRejectedGroups(graph.groups); - let newClosedGroupNodes = calcClosedGroupsNodes(rejectedGroups, prevViewGraph.nodes); - let {nodes, rejectedNodes} = calcNodesAndRejectedNodes(graph.nodes, graph.groups); - nodes = R.concat(newClosedGroupNodes, nodes); - - let {links, rejectedSourceLinks, rejectedTargetLinks, rejectedBothLinks} = - calcLinksAndRejectedLinks(graph.links, rejectedNodes); - - let newLinksForRejectedSource = - calcNewLinksForRejectedSource(rejectedSourceLinks, nodes, prevViewGraph.links); - - let newLinksForRejectedTarget = - calcNewLinksForRejectedTarget(rejectedTargetLinks, nodes, prevViewGraph.links); - - let newLinksForRejectedBoth = - calcNewLinksForRejectedBoth(rejectedBothLinks, nodes, prevViewGraph.links); - - links = R.pipe( - R.concat(newLinksForRejectedSource), - R.concat(newLinksForRejectedTarget), - R.concat(newLinksForRejectedBoth) - )(links); - - return { - nodes, - links, - groups - }; -} - -function calcGroupsAndRejectedGroups(originalGroups) { - let rejectedGroups = R.filter(R.propEq('isExpanded', false), originalGroups); - let groups = R.reject(R.propEq('isExpanded', false), originalGroups); - - return { groups, rejectedGroups }; -} - -function calcClosedGroupsNodes(rejectedGroups, prevViewNodes) { - return R.reduce((acc, group) => { - let nodeId = `${group._osid}-group-node`; - let prevNode = R.find(R.propEq('_osid', nodeId), prevViewNodes); - if (prevNode) { - return R.append(prevNode, acc); - } - - return R.append({ - _osid: nodeId, - _osmeta: { - type: `view_group-${group.type}`, - nodeId: group._osid, - }, - width: 60, - height: 40, - name: group._osid - }, acc); - }, [], rejectedGroups); -} - -function calcNodesAndRejectedNodes(originalNodes, originalGroups) { - let rejectedNodes = []; - let nodes = R.reject((node) => { - let groupId = R.path(['_osmeta', 'groupId'], node); - if (R.isNil(groupId)) { return false; } - - let group = R.find(R.propEq('_osid', groupId), originalGroups); - if (R.isNil(group)) { return false; } - - if (group.isExpanded) { return false; } - - rejectedNodes = R.append(node, rejectedNodes); - return true; - }, originalNodes); - - return { nodes, rejectedNodes }; -} - -function calcLinksAndRejectedLinks(originalLinks, rejectedNodes) { - return R.reduce((acc, link) => { - let sourceRejected = R.contains(link.source, rejectedNodes); - let targetRejected = R.contains(link.target, rejectedNodes); - - if (sourceRejected && targetRejected) { - acc = R.assoc('rejectedBothLinks', R.append(link, acc.rejectedBothLinks), acc); - return acc; - } - - if (sourceRejected) { - acc = R.assoc('rejectedSourceLinks', R.append(link, acc.rejectedSourceLinks), acc); - return acc; - } - - if (targetRejected) { - acc = R.assoc('rejectedTargetLinks', R.append(link, acc.rejectedTargetLinks), acc); - return acc; - } - - acc = R.assoc('links', R.append(link, acc.links), acc); - return acc; - }, - {links: [], rejectedSourceLinks: [], rejectedTargetLinks: [], rejectedBothLinks: [] }, - originalLinks); -} - -function calcNewLinksForRejectedSource(rejectedSourceLinks, nodes, prevLinks) { - let newLinksForRejectedSource = R.reduce((acc, link) => { - let groupId = R.path(['_osmeta', 'groupId'], link.source); - let groupNodeId = `${groupId}-group-node`; - let newSource = R.find(R.propEq('_osid', groupNodeId), nodes); - if (R.isNil(newSource)) { - throw 'error in new links for rejected source function'; - } - - let newLinkId = `${newSource._osid}:${link.target._osid}:rejected-source`; - - let existingLink = R.find(R.propEq('_osid', newLinkId), acc); - if (existingLink) { - return acc; - } - - let prevExistingLink = R.find(R.propEq('_osid', newLinkId), prevLinks); - if (prevExistingLink) { - return R.append(prevExistingLink, acc); - } - - return R.append({ - source: newSource , - target: link.target, - label: link.label, - _osid: newLinkId - }, acc); - }, [], rejectedSourceLinks); - - return newLinksForRejectedSource; -} - -function calcNewLinksForRejectedTarget(rejectedLinks, nodes, prevLinks) { - let newLinks = R.reduce((acc, link) => { - let groupId = R.path(['_osmeta', 'groupId'], link.target); - let groupNodeId = `${groupId}-group-node`; - let newTarget = R.find(R.propEq('_osid', groupNodeId), nodes); - if (R.isNil(newTarget)) { - throw 'error in new links for rejected target function'; - } - - let newLinkId = `${link.source._osid}:${newTarget._osid}:rejected-target`; - - let existingLink = R.find(R.propEq('_osid', newLinkId), acc); - if (existingLink) { - return acc; - } - - let prevExistingLink = R.find(R.propEq('_osid', newLinkId), prevLinks); - if (prevExistingLink) { - return R.append(prevExistingLink, acc); - } - - return R.append({ - source: link.source , - target: newTarget, - label: link.label, - _osid: newLinkId - }, acc); - }, [], rejectedLinks); - - return newLinks; -} - -function calcNewLinksForRejectedBoth(rejectedLinks, nodes, prevLinks) { - let newLinks = R.reduce((acc, link) => { - let targetHost = R.path(['_osmeta', 'groupId'], link.target); - let sourceHost = R.path(['_osmeta', 'groupId'], link.source); - let groupSourceNodeId = `${sourceHost}-group-node`; - let groupTargetNodeId = `${targetHost}-group-node`; - - if (targetHost === sourceHost) { - return acc; - } - - let newLinkId = `${sourceHost}:${targetHost}:groups-link`; - let existingNewLink = R.find(R.propEq('_osid', newLinkId), acc); - if (existingNewLink) { - return acc; - } - - let prevExistingLink = R.find(R.propEq('_osid', newLinkId), prevLinks); - if (prevExistingLink) { - return R.append(prevExistingLink, acc); - } - - let newSource = R.find(R.propEq('_osid', groupSourceNodeId), nodes); - let newTarget = R.find(R.propEq('_osid', groupTargetNodeId), nodes); - - let newLink = { - source: newSource, - target: newTarget, - label: 'hosts link', - _osid: newLinkId - }; - - return R.append(newLink, acc); - }, [], rejectedLinks); - - return newLinks; -} diff --git a/ui/imports/ui/components/network-graph/network-graph.styl b/ui/imports/ui/components/network-graph/network-graph.styl deleted file mode 100644 index d5f7ce2..0000000 --- a/ui/imports/ui/components/network-graph/network-graph.styl +++ /dev/null @@ -1,25 +0,0 @@ -.os-network-graph - width: 100%; - height: 100%; - - .sm-graph - width: 100%; - height: 100%; - - .group - .group-shape - stroke: #fff; - stroke-width: 1.5px; - cursor: move; - opacity: 0.7; - - .group-name - fill: rgba(133, 133, 133, 0.52); - font-weight: 400; - line-height: 20px; - font-family: 'Helvetica', 'Arial', sans-serif; - - .link-group - text - font: bold sans-serif; - fill: rgba(8, 8, 8, 0.73); diff --git a/ui/imports/ui/components/network-info-box/network-info-box.html b/ui/imports/ui/components/network-info-box/network-info-box.html deleted file mode 100644 index b9e07f2..0000000 --- a/ui/imports/ui/components/network-info-box/network-info-box.html +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/ui/imports/ui/components/network-info-box/network-info-box.js b/ui/imports/ui/components/network-info-box/network-info-box.js deleted file mode 100644 index 8843c5c..0000000 --- a/ui/imports/ui/components/network-info-box/network-info-box.js +++ /dev/null @@ -1,69 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: NetworkInfoBox - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { regexEscape } from '/imports/lib/regex-utils'; -import { Inventory } from '/imports/api/inventories/inventories'; - -import './network-info-box.html'; - -/* - * Lifecycles - */ - -Template.NetworkInfoBox.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - portsCount: 0 - }); - - instance.autorun(function () { - let network = instance.data.network; - instance.subscribe('inventory?id_path_like&type', network.id_path, 'port'); - - let idPathExp = new RegExp(regexEscape(network.id)); - instance.state.set('portsCount', Inventory.find({ - id_path: idPathExp, - type: 'port' - }).count()); - }); - -}); - -/* -Template.NetworkInfoBox.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.NetworkInfoBox.events({ -}); - -/* - * Helpers - */ - -Template.NetworkInfoBox.helpers({ - portsCount: function () { - let instance = Template.instance(); - return instance.state.get('portsCount'); - } -}); - - diff --git a/ui/imports/ui/components/network-info-box/network-info-box.styl b/ui/imports/ui/components/network-info-box/network-info-box.styl deleted file mode 100644 index 5228d20..0000000 --- a/ui/imports/ui/components/network-info-box/network-info-box.styl +++ /dev/null @@ -1,2 +0,0 @@ -/* Set the component style here */ -// "NetworkInfoBox" diff --git a/ui/imports/ui/components/new-scanning/new-scanning.html b/ui/imports/ui/components/new-scanning/new-scanning.html deleted file mode 100644 index acd65bc..0000000 --- a/ui/imports/ui/components/new-scanning/new-scanning.html +++ /dev/null @@ -1,53 +0,0 @@ - - diff --git a/ui/imports/ui/components/new-scanning/new-scanning.js b/ui/imports/ui/components/new-scanning/new-scanning.js deleted file mode 100644 index 27b72c2..0000000 --- a/ui/imports/ui/components/new-scanning/new-scanning.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Template Component: NewScanning - */ - -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { ScheduledScans, subsScheduledScansEnv } from '/imports/api/scheduled-scans/scheduled-scans'; - -import './new-scanning.html'; - -/* - * Lifecycles - */ - -Template.NewScanning.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null, - scheduledScanId: null - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - env: { type: String, optional: true }, - }).validate(data); - - instance.state.set('env', data.env); - }); - - instance.autorun(function () { - let env = instance.state.get('env'); - instance.subscribe(subsScheduledScansEnv, env); - ScheduledScans.find({ environment: env }).forEach((schedule) => { - instance.state.set('scheduledScanId', schedule._id); - }); - }); -}); - -/* -Template.NewScanning.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.NewScanning.events({ -}); - -/* - * Helpers - */ - -Template.NewScanning.helpers({ - argsScanningRequest: function (env) { - return { - action: 'insert', - env: env, - }; - }, - - argsScheduledScan: function (env) { - let instance = Template.instance(); - let scheduledScanId = instance.state.get('scheduledScanId'); - let action = R.ifElse(R.isNil, R.always('insert'), R.always('update'))(scheduledScanId); - - return { - action: action, - env: env, - _id: scheduledScanId, - }; - }, -}); // end: helpers - - diff --git a/ui/imports/ui/components/new-scanning/new-scanning.styl b/ui/imports/ui/components/new-scanning/new-scanning.styl deleted file mode 100644 index e7c83fe..0000000 --- a/ui/imports/ui/components/new-scanning/new-scanning.styl +++ /dev/null @@ -1,7 +0,0 @@ -.os-new-scanning - display: flex; - flex-flow: row nowrap; - padding: 20px; - - .sm-content - flex: 1; diff --git a/ui/imports/ui/components/pager/pager.html b/ui/imports/ui/components/pager/pager.html deleted file mode 100644 index 2e14bbd..0000000 --- a/ui/imports/ui/components/pager/pager.html +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/ui/imports/ui/components/pager/pager.js b/ui/imports/ui/components/pager/pager.js deleted file mode 100644 index 19b2789..0000000 --- a/ui/imports/ui/components/pager/pager.js +++ /dev/null @@ -1,123 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: Pager - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; - -import './pager.html'; - -/* - * Lifecycles - */ - -Template.Pager.onCreated(function() { - var instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - pagesButtons: [{ label: '1', number: 1 }], - currentPage: 1, - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - disableNext: { type: Boolean }, - disablePrev: { type: Boolean }, - totalPages: { type: Number }, - currentPage: { type: Number }, - onReqNext: { type: Function }, - onReqPrev: { type: Function }, - onReqPage: { type: Function }, - onReqFirst: { type: Function }, - onReqLast: { type: Function }, - }).validate(data); - - instance.state.set('totalPages', data.totalPages); - instance.state.set('currentPage', data.currentPage); - }); - - instance.autorun(function () { - let numOfPagesInPager = 5; - let totalPages = instance.state.get('totalPages'); - let currentPage = instance.state.get('currentPage'); - let first = R.ifElse((x) => x < 1, R.always(1), R.identity)(currentPage - numOfPagesInPager + 1); - let last = R.ifElse((x) => x > totalPages, R.always(totalPages + 1), R.identity)( - first + numOfPagesInPager); - - let pagesButtons = R.map((pageNumber) => { - return { - label: R.toString(pageNumber), number: pageNumber - }; - }, R.range(first, last)); - - instance.state.set('pagesButtons', pagesButtons); - }); -}); - -/* -Template.Pager.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.Pager.events({ - 'click .sm-prev-button': function (_event, _instance) { - let data = Template.currentData(); - data.onReqPrev(); - }, - - 'click .sm-next-button': function (_event, _instance) { - let data = Template.currentData(); - data.onReqNext(); - }, - - 'click .sm-first-button': function (_event, _instance) { - let data = Template.currentData(); - data.onReqFirst(); - }, - - 'click .sm-last-button': function (_event, _instance) { - let data = Template.currentData(); - data.onReqLast(); - }, - - 'click .sm-page-button': function (event, _instance) { - let data = Template.currentData(); - let pageNumber = parseInt(event.target.dataset.pageNumber); - data.onReqPage(pageNumber); - }, - - -}); - -/* - * Helpers - */ - -Template.Pager.helpers({ - pagesButtons: function () { - let instance = Template.instance(); - return instance.state.get('pagesButtons'); - }, - - isCurrentPage: function (pageNum, currentPage) { - return pageNum === currentPage; - }, -}); // end: helpers - - diff --git a/ui/imports/ui/components/pager/pager.styl b/ui/imports/ui/components/pager/pager.styl deleted file mode 100644 index 3843ccd..0000000 --- a/ui/imports/ui/components/pager/pager.styl +++ /dev/null @@ -1,4 +0,0 @@ -.os-pager - .cl-disabled - color: gray; - diff --git a/ui/imports/ui/components/project-dashboard/project-dashboard.html b/ui/imports/ui/components/project-dashboard/project-dashboard.html deleted file mode 100644 index fd8365e..0000000 --- a/ui/imports/ui/components/project-dashboard/project-dashboard.html +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/ui/imports/ui/components/project-dashboard/project-dashboard.js b/ui/imports/ui/components/project-dashboard/project-dashboard.js deleted file mode 100644 index 6600dc5..0000000 --- a/ui/imports/ui/components/project-dashboard/project-dashboard.js +++ /dev/null @@ -1,149 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: ProjectDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - - -import { Inventory } from '/imports/api/inventories/inventories'; -import { store } from '/imports/ui/store/store'; -import { Icon } from '/imports/lib/icon'; -import { regexEscape } from '/imports/lib/regex-utils'; - -import '/imports/ui/components/accordion-nav-menu/accordion-nav-menu'; - -import '/imports/ui/components/network-info-box/network-info-box'; - -import './project-dashboard.html'; - -/* - * Lifecycles - */ - -Template.ProjectDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - id_path: null, - infoBoxes: [{ - header: ['components', 'projectDashboard', 'infoBoxes', 'networks', 'header'], - dataSource: 'networksCount', - icon: { type: 'material', name: 'device_hub' }, - theme: 'dark' - }, { - header: ['components', 'projectDashboard', 'infoBoxes', 'ports', 'header'], - dataSource: 'portsCount', - icon: { type: 'material', name: 'settings_input_hdmi' }, - theme: 'dark' - }], - networksCount: 0, - portsCount: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - - Inventory.find({ _id: _id }).forEach((project) => { - instance.state.set('id_path', project.id_path); - - instance.subscribe('inventory?id_path', project.id_path); - instance.subscribe('inventory?id_path_start&type', project.id_path, 'network'); - instance.subscribe('inventory?id_path_start&type', project.id_path, 'port'); - - let idPathExp = new RegExp(`^${regexEscape(project.id_path)}`); - - instance.state.set('networksCount', Inventory.find({ - id_path: idPathExp, - type: 'network' - }).count()); - - instance.state.set('portsCount', Inventory.find({ - id_path: idPathExp, - type: 'port' - }).count()); - }); - }); -}); - -/* -Template.ProjectDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ProjectDashboard.events({ -}); - -/* - * Helpers - */ - -Template.ProjectDashboard.helpers({ - project: function () { - let instance = Template.instance(); - let _id = instance.state.get('_id'); - return Inventory.findOne({ _id: _id }); - }, - - infoBoxes: function () { - let instance = Template.instance(); - return instance.state.get('infoBoxes'); - }, - - networks: function () { - let instance = Template.instance(); - let project_id_path = instance.state.get('id_path'); - let idPathExp = new RegExp(`^${regexEscape(project_id_path)}`); - return Inventory.find({ - id_path: idPathExp, - type: 'network' - }); - }, - - genArgsInfoBox: function (infoBox) { - let instance = Template.instance(); - - return { - header: R.path(infoBox.header, store.getState().api.i18n), - dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(infoBox.icon), - theme: infoBox.theme - }; - }, - - argsNetworkInfoBox: function (network) { - return { - network: network - }; - } -}); diff --git a/ui/imports/ui/components/project-dashboard/project-dashboard.styl b/ui/imports/ui/components/project-dashboard/project-dashboard.styl deleted file mode 100644 index 01e2a67..0000000 --- a/ui/imports/ui/components/project-dashboard/project-dashboard.styl +++ /dev/null @@ -1,14 +0,0 @@ -/* Set the component style here */ -.os-project-dashboard - .sm-info-boxes - display: flex - flex-flow: row wrap; - justify-content: space-around - - .sm-list-info-boxes - display: flex; - flex-flow: row wrap - justify-content: space-around - - >.sm-item - margin: 10px; diff --git a/ui/imports/ui/components/region-dashboard/region-dashboard.html b/ui/imports/ui/components/region-dashboard/region-dashboard.html deleted file mode 100644 index 93967a5..0000000 --- a/ui/imports/ui/components/region-dashboard/region-dashboard.html +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/ui/imports/ui/components/region-dashboard/region-dashboard.js b/ui/imports/ui/components/region-dashboard/region-dashboard.js deleted file mode 100644 index 23d90da..0000000 --- a/ui/imports/ui/components/region-dashboard/region-dashboard.js +++ /dev/null @@ -1,220 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: RegionDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { store } from '/imports/ui/store/store'; -import { Icon } from '/imports/lib/icon'; -import { regexEscape } from '/imports/lib/regex-utils'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import { setCurrentNode } from '/imports/ui/actions/navigation'; - -import '/imports/ui/components/accordion-nav-menu/accordion-nav-menu'; -import '/imports/ui/components/data-cubic/data-cubic'; -import '/imports/ui/components/list-info-box/list-info-box'; - -import './region-dashboard.html'; - -let infoBoxes = [{ - header: ['components', 'regionDashboard', 'infoBoxes', 'instances', 'header'], - dataSource: 'instancesCount', - icon: { type: 'fa', name: 'desktop' }, - theme: 'dark' -}, { - header: ['components', 'regionDashboard', 'infoBoxes', 'vServices', 'header'], - dataSource: 'vServicesCount', - icon: { type: 'fa', name: 'object-group' }, - theme: 'dark' -}, { - header: ['components', 'regionDashboard', 'infoBoxes', 'hosts', 'header'], - dataSource: 'hostsCount', - icon: { type: 'fa', name: 'server' }, - theme: 'dark' -}, { - header: ['components', 'regionDashboard', 'infoBoxes', 'vConnectors', 'header'], - dataSource: 'vConnectorsCount', - icon: { type: 'fa', name: 'compress' }, - theme: 'dark' -}]; - -let listInfoBoxes = [{ - header: ['components', 'regionDashboard', 'listInfoBoxes', 'availabilityZones', 'header'], - listName: 'availabilityZones', - listItemFormat: { - getLabelFn: (item) => { return item.name; }, - getValueFn: (item) => { return item._id._str; }, - }, - icon: { type: 'material', name: 'developer_board' }, -}, { - header: ['components', 'regionDashboard', 'listInfoBoxes', 'aggregates', 'header'], - listName: 'aggregates', - listItemFormat: { - getLabelFn: (item) => { return item.name; }, - getValueFn: (item) => { return item._id._str; }, - }, - icon: { type: 'material', name: 'storage' }, -}]; - -/* - * Lifecycles - */ - -Template.RegionDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - id_path: null, - instancesCount: 0, - vServicesCount: 0, - hostsCount: 0, - vConnectors: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - Inventory.find({ _id: _id }).forEach((region) => { - instance.state.set('id_path', region.id_path); - - instance.subscribe('inventory?id_path', region.id_path); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'instance'); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'vservice'); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'host'); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'vconnector'); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'availability_zone'); - instance.subscribe('inventory?id_path_start&type', region.id_path, 'aggregate'); - - let idPathExp = new RegExp(`^${regexEscape(region.id_path)}`); - - instance.state.set('instancesCount', Inventory.find({ - id_path: idPathExp, - type: 'instance' - }).count()); - - instance.state.set('vServicesCount', Inventory.find({ - id_path: idPathExp, - type: 'vservice' - }).count()); - - instance.state.set('hostsCount', Inventory.find({ - id_path: idPathExp, - type: 'host' - }).count()); - - instance.state.set('vConnectorsCount', Inventory.find({ - id_path: idPathExp, - type: 'vconnector' - }).count()); - }); - - }); - -}); - -/* -Template.RegionDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.RegionDashboard.events({ -}); - -/* - * Helpers - */ - -Template.RegionDashboard.helpers({ - region: function () { - let instance = Template.instance(); - let _id = instance.state.get('_id'); - - return Inventory.findOne({ _id: _id }); - }, - - infoBoxes: function () { - return infoBoxes; - }, - - listInfoBoxes: function () { - return listInfoBoxes; - }, - - argsInfoBox: function (infoBox) { - let instance = Template.instance(); - - return { - header: R.path(infoBox.header, store.getState().api.i18n), - dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(infoBox.icon), - theme: infoBox.theme - }; - }, - - argsListInfoBox: function (listInfoBox) { - let instance = Template.instance(); - let data = Template.currentData(); - let region_id_path = instance.state.get('id_path'); - - return { - header: R.path(listInfoBox.header, store.getState().api.i18n), - list: getList(listInfoBox.listName, region_id_path), - //dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(listInfoBox.icon), - //theme: infoBox.theme - listItemFormat: listInfoBox.listItemFormat, - onItemSelected: function (itemKey) { - data.onNodeSelected(new Mongo.ObjectID(itemKey)); - } - }; - }, -}); - -function getList(listName, parentIdPath) { - let idPathExp = new RegExp(`^${regexEscape(parentIdPath)}`); - - switch (listName) { - case 'availabilityZones': - return Inventory.find({ - id_path: idPathExp, - type: 'availability_zone' - }); - - case 'aggregates': - return Inventory.find({ - id_path: idPathExp, - type: 'aggregate' - }); - - default: - throw 'unknowned list type'; - } -} diff --git a/ui/imports/ui/components/region-dashboard/region-dashboard.styl b/ui/imports/ui/components/region-dashboard/region-dashboard.styl deleted file mode 100644 index 044760f..0000000 --- a/ui/imports/ui/components/region-dashboard/region-dashboard.styl +++ /dev/null @@ -1,14 +0,0 @@ -/* Set the component style here */ -.os-region-dashboard - .sm-info-boxes - display: flex - flex-flow: row wrap; - justify-content: space-around - - .sm-list-info-boxes - display: flex; - flex-flow: row wrap - justify-content: space-around - - >.sm-item - margin: 10px; diff --git a/ui/imports/ui/components/scanning-request/scanning-request.html b/ui/imports/ui/components/scanning-request/scanning-request.html deleted file mode 100644 index b28e5b2..0000000 --- a/ui/imports/ui/components/scanning-request/scanning-request.html +++ /dev/null @@ -1,75 +0,0 @@ - - diff --git a/ui/imports/ui/components/scanning-request/scanning-request.js b/ui/imports/ui/components/scanning-request/scanning-request.js deleted file mode 100644 index 44b2f79..0000000 --- a/ui/imports/ui/components/scanning-request/scanning-request.js +++ /dev/null @@ -1,383 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: ScanningRequest - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - -import { Constants } from '/imports/api/constants/constants'; -//import { createInputArgs } from '/imports/ui/lib/input-model'; -import { createSelectArgs } from '/imports/ui/lib/select-model'; -import { Scans } from '/imports/api/scans/scans'; - -import '/imports/ui/components/input-model/input-model'; -import '/imports/ui/components/select-model/select-model'; - -import { - insert, -} from '/imports/api/scans/methods'; - -import './scanning-request.html'; - -const noteTypeScanExists = { - type: 'scanExists', - message: 'There is already a scan in progess in the system. Please wait until it ends.' -}; - -/* - * Lifecycles - */ - -Template.ScanningRequest.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - beforeInsert: true, - reload: null, - }); - - instance.autorun(function () { - let data = Template.currentData(); - instance.state.get('reload'); - - new SimpleSchema({ - action: { type: String, allowedValues: ['insert', 'view', 'update'] }, - env: { type: String, optional: true }, - _id: { - type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } }, - optional: true - }, - }).validate(data); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - instance.state.set('disabled', false); - - switch (data.action) { - case 'insert': - initInsertView(instance, data); - break; - - case 'view': - initViewView(instance, data); - break; - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.ScanningRequest.rendered = function() { -}; -*/ - -/* -* Events -*/ - -Template.ScanningRequest.events({ - 'click .js-submit-button': function(event, instance) { - submitItem(instance); - } -}); - -/* -* Helpers -*/ - -Template.ScanningRequest.helpers({ - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - notifications: function () { - let instance = Template.instance(); - let notifications = instance.state.get('notifications'); - let notesExpaned = R.pipe( - R.map((noteType) => { - switch(noteType) { - case noteTypeScanExists.type: - return noteTypeScanExists.message; - default: - return ''; - } - }), - R.values() - )(notifications); - - return notesExpaned; - }, - - notificationsExists: function () { - let instance = Template.instance(); - return R.keys(instance.state.get('notifications')).length > 0; - }, - - model: function () { - let instance = Template.instance(); - return instance.state.get('model'); - }, - - createInputArgs: function (params) { - let instance = Template.instance(); - - return { - value: params.hash.value, - type: params.hash.type, - classes: params.hash.classes, - placeholder: params.hash.placeholder, - disabled: params.hash.disabled, - setModel: function (value) { - let key = params.hash.key; - let model = instance.state.get('model'); - let newModel = model; - - if(R.indexOf(key, Scans.scansOnlyFields) >= 0) { - newModel = setRadioValues(Scans.scansOnlyFields, key, value, model); - }else { - newModel = R.assoc(key, value, newModel); - } - - instance.state.set('model', newModel); - }, - }; - }, - - createSelectArgs: createSelectArgs, - - calcSetModelFn: function (key) { - let instance = Template.instance(); - let intf = { - fn: (values) => { - let model = instance.state.get('model'); - let newModel = R.assoc(key, values, model); - instance.state.set('model', newModel); - }, - sample: 'text' - }; - - return intf; - }, - - getFieldDesc: function (key) { - //let instance = Template.instance(); - return Scans.schemaRelated[key].description; - }, - - commandOptions: function () { - let array = []; - - R.mapObjIndexed((value, key) => { - array = R.append({ - name: key, - info: value - }, array); - }, Scans.schemaRelated); - - return array; - }, - - getModelKeyValue: function (key) { - let instance = Template.instance(); - return R.path([key], instance.state.get('model')); - }, - - calcInputType: function(fieldInfo) { - if (fieldInfo.type == Boolean) { - return 'checkbox'; - } - - if (fieldInfo.type == String) { - return 'textbox'; - } - - return 'textbox'; - }, - - isCommandOptionSelectType(commandOption) { - return (R.path(['info', 'subtype'], commandOption) === 'select'); - }, - - calcCommandSelectOptions(commandOption) { - let item = Constants.findOne({ name: R.path(['info', 'options'], commandOption) }); - if (R.isNil(item)) { return []; } - return item.data; - }, - - pageHeader() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - switch (action) { - case 'insert': - return 'New Scanning Request'; - - case 'view': - return 'Scan Information'; - - default: - return ''; - } - }, - - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update']); - }, - - isCommandDisabled(isSpecificCommandDisabled) { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return isSpecificCommandDisabled || (action === 'view'); - } -}); - -function submitItem(instance) { - let action = instance.state.get('action'); - let model = instance.state.get('model'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - environment: model.environment, - inventory: model.inventory, - object_id: model.object_id, - log_level: model.log_level, - clear: model.clear, - scan_only_inventory: model.scan_only_inventory, - scan_only_links: model.scan_only_links, - scan_only_cliques: model.scan_only_cliques, - }, processActionResult.bind(null, instance)); - break; - default: - // todo - break; - } -} - -function setRadioValues(radioFields, key, value, modal) { - let newModal = modal; - let currentRadioFields = R.filter(f => modal[f], radioFields); - - for(let field of currentRadioFields) { - newModal = R.assoc(field, false, newModal); - } - - newModal = R.assoc(key, value, newModal); - return newModal; -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - } else { - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - if (action === 'insert') { - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - instance.state.set('beforeInsert', false); - } else if (action === 'update') { - instance.state.set('message', 'Record had been updated successfully'); - } - - setTimeout(() => { - instance.state.set('reload', Date.now()); - }, 7000); - } -} - -function initInsertView(instance, data) { - instance.state.set('action', data.action); - instance.state.set('env', data.env); - instance.state.set('model', Scans.schema.clean({ - environment: instance.state.get('env') - })); - - instance.subscribe('constants'); - instance.subscribe('scans?env', data.env); - - updateNotificationSameScanExistsForInsert(instance, data.env); - - // todo -} - -function updateNotificationSameScanExistsForInsert(instance, env) { - let notifications = instance.state.get('notifications'); - if (Scans.find({ - environment: env, - status: { - $in: ['pending', 'running'] - } }).count() > 0) { - - instance.state.set('notifications', R.assoc( - noteTypeScanExists.type, - noteTypeScanExists.type, - notifications - )); - } else { - instance.state.set('notifications', R.dissoc( - noteTypeScanExists.type, - notifications - )); - } -} - -function initViewView(instance, data) { - instance.state.set('action', data.action); - instance.state.set('env', data.env); - instance.state.set('id', data._id); - - instance.subscribe('constants'); - instance.subscribe('scans?id', data._id); - - let model = Scans.findOne({ _id: data._id }); - instance.state.set('model', model); - // todo -} diff --git a/ui/imports/ui/components/scanning-request/scanning-request.styl b/ui/imports/ui/components/scanning-request/scanning-request.styl deleted file mode 100644 index 53f197f..0000000 --- a/ui/imports/ui/components/scanning-request/scanning-request.styl +++ /dev/null @@ -1,7 +0,0 @@ -.os-scanning-request - margin: 20px; - - .sm-form-container - .js-message-panel - margin: 20px 0; - diff --git a/ui/imports/ui/components/scans-list/scans-list.html b/ui/imports/ui/components/scans-list/scans-list.html deleted file mode 100644 index 6466068..0000000 --- a/ui/imports/ui/components/scans-list/scans-list.html +++ /dev/null @@ -1,86 +0,0 @@ - - diff --git a/ui/imports/ui/components/scans-list/scans-list.js b/ui/imports/ui/components/scans-list/scans-list.js deleted file mode 100644 index d8296aa..0000000 --- a/ui/imports/ui/components/scans-list/scans-list.js +++ /dev/null @@ -1,224 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: ScansList - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Counts } from 'meteor/tmeasday:publish-counts'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { Scans, - subsScansEnvPageAmountSorted, - subsScansEnvPageAmountSortedCounter, -} from '/imports/api/scans/scans'; - -import '/imports/ui/components/pager/pager'; - -import './scans-list.html'; - -/* - * Lifecycles - */ - -Template.ScansList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null, - page: 1, - amountPerPage: 10, - sortField: 'submit_timestamp', - sortDirection: -1, - }); - - instance.autorun(function () { - //let data = Template.currentData(); - - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - env: { type: String, optional: true }, - }).validate(query); - - let env = query.env; - if (R.isNil(env)) { - instance.state.set('env', null); - } else { - instance.state.set('env', env); - } - - }); - - instance.autorun(function () { - let env = instance.state.get('env'); - let amountPerPage = instance.state.get('amountPerPage'); - let page = instance.state.get('page'); - let sortField = instance.state.get('sortField'); - let sortDirection = instance.state.get('sortDirection'); - - instance.subscribe(subsScansEnvPageAmountSorted, - env, page, amountPerPage, sortField, sortDirection); - - }); - -}); - -/* -Template.ScansList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ScansList.events({ - 'click .sm-table-header': function (event, instance) { - event.preventDefault(); - let isSortable = event.target.dataset.isSortable; - if (! isSortable ) { return; } - - let sortField = event.target.dataset.sortField; - let currentSortField = instance.state.get('sortField'); - let currentSortDirection = instance.state.get('sortDirection'); - - if (sortField === currentSortField) { - let sortDirection = null; - if (currentSortDirection === null) { - sortDirection = -1; - } else if (currentSortDirection === -1) { - sortDirection = 1; - } else if (currentSortDirection === 1) { - sortField = null; - sortDirection = null; - } else { - sortField = null; - sortDirection = null; - } - - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', sortDirection); - - } else { - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', -1); - } - }, -}); - -/* - * Helpers - */ - -Template.ScansList.helpers({ - scans: function () { - let instance = Template.instance(); - let page = instance.state.get('page'); - let amountPerPage = instance.state.get('amountPerPage'); - let sortField = instance.state.get('sortField'); - let sortDirection = instance.state.get('sortDirection'); - - let skip = (page - 1) * amountPerPage; - let sortParams = {}; - sortParams = R.ifElse(R.isNil, R.always(sortParams), - R.assoc(R.__, sortDirection, sortParams))(sortField); - - let qParams = { - limit: amountPerPage, - skip: skip, - sort: sortParams, - }; - - return Scans.find({}, qParams); - }, - - currentPage: function () { - let instance = Template.instance(); - return instance.state.get('page'); - }, - - amountPerPage: function () { - let instance = Template.instance(); - return instance.state.get('amountPerPage'); - }, - - totalItems: function () { - //let instance = Template.instance(); - //let page = instance.state.get('page'); - //let amountPerPage = instance.state.get('amountPerPage'); - let counterName = subsScansEnvPageAmountSortedCounter; - - return Counts.get(counterName); - }, - - argsPager: function (currentPage, amountPerPage, totalItems) { - let instance = Template.instance(); - let totalPages = Math.ceil(totalItems / amountPerPage); - - return { - disableNext: currentPage * amountPerPage > totalItems, - disablePrev: currentPage == 1, - totalPages: totalPages, - currentPage: currentPage, - onReqNext: function () { - console.log('next'); - let page = (currentPage * amountPerPage > totalItems) ? currentPage : currentPage + 1; - instance.state.set('page', page); - }, - onReqPrev: function () { - console.log('prev'); - let page = (currentPage == 1) ? currentPage : currentPage - 1; - instance.state.set('page', page); - }, - onReqFirst: function () { - console.log('req first'); - instance.state.set('page', 1); - }, - onReqLast: function () { - console.log('req last'); - instance.state.set('page', totalPages); - }, - onReqPage: function (pageNumber) { - console.log('req page'); - let page; - if (pageNumber <= 1) { - page = 1; - } else if (pageNumber > Math.ceil(totalItems / amountPerPage)) { - page = totalPages; - } else { - page = pageNumber; - } - - instance.state.set('page', page); - }, - }; - }, - - fieldSortClass: function (fieldName) { - let instance = Template.instance(); - let classes = 'fa fa-sort'; - if (fieldName === instance.state.get('sortField')) { - let sortDirection = instance.state.get('sortDirection'); - if (sortDirection === -1) { - classes = 'fa fa-sort-desc'; - } else if (sortDirection === 1) { - classes = 'fa fa-sort-asc'; - } - } - - return classes; - }, -}); - diff --git a/ui/imports/ui/components/scans-list/scans-list.styl b/ui/imports/ui/components/scans-list/scans-list.styl deleted file mode 100644 index 327ff4b..0000000 --- a/ui/imports/ui/components/scans-list/scans-list.styl +++ /dev/null @@ -1,33 +0,0 @@ -.os-scans-list - display: flex; - flex-flow: column nowrap; - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-scans-table - th - color: spark-blue - - a - color: spark-blue; - cursor: pointer; - i.fa - padding: 0px 3px; - font-size: small; - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-pager-section - display: flex; - justify-content: center; - diff --git a/ui/imports/ui/components/scheduled-scan/scheduled-scan.html b/ui/imports/ui/components/scheduled-scan/scheduled-scan.html deleted file mode 100644 index 2abdcaf..0000000 --- a/ui/imports/ui/components/scheduled-scan/scheduled-scan.html +++ /dev/null @@ -1,117 +0,0 @@ - - diff --git a/ui/imports/ui/components/scheduled-scan/scheduled-scan.js b/ui/imports/ui/components/scheduled-scan/scheduled-scan.js deleted file mode 100644 index 3970db0..0000000 --- a/ui/imports/ui/components/scheduled-scan/scheduled-scan.js +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Template Component: ScheduledScan - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import * as R from 'ramda'; -import { RRule } from 'rrule'; -import { ScheduledScans, - scansOnlyFields, - subsScheduledScansId, -} from '/imports/api/scheduled-scans/scheduled-scans'; -import { Environments } from '/imports/api/environments/environments'; -import { Constants } from '/imports/api/constants/constants'; -import { insert, remove, update } from '/imports/api/scheduled-scans/methods'; - -import '/imports/ui/components/mt-select/mt-select'; -import '/imports/ui/components/mt-input/mt-input'; -import '/imports/ui/components/mt-radios/mt-radios'; - -import './scheduled-scan.html'; - -/* - * Lifecycles - */ - -Template.ScheduledScan.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - action: null, - _id: null, - model: null, - isError: false, - isSuccess: false, - isMessage: false, - message: null, - envsAsOptions: [], - logLevelsAsOptions: [], - pageHeader: 'Schedule a Scan', - reload: null, - }); - - instance.autorun(function () { - let data = Template.currentData(); - instance.state.get('reload'); - - new SimpleSchema({ - _id: { - type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } }, - optional: true - }, - action: { type: String }, - env: { type: String, optional: true }, - }).validate(data); - - instance.state.set('action', data.action); - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - instance.state.set('disabled', false); - - R.when(R.pipe(R.isNil, R.not), x => instance.state.set('_id', x))(data._id); - R.when(R.pipe(R.isNil, R.not), x => instance.state.set('env', x))(data.env); - }); - - instance.autorun(function () { - let currentOptions = instance.state.get('envsAsOptions'); - instance.subscribe('environments_config'); - let tempOptions = []; - - let addToOptionsDebounced = _.debounce(() => { - if (currentOptions.length === tempOptions.length) { - let result = R.intersectionWith(R.eqBy(R.prop('value')), tempOptions, currentOptions); - if (result.length === currentOptions.length) { - return; - } - } - - instance.state.set('envsAsOptions', tempOptions); - }, 250); - - Environments.find({}).forEach((env) => { - let option = envToOption(env); - tempOptions = R.unionWith(R.eqBy(R.prop('value')), [option], tempOptions); - addToOptionsDebounced(); - }); - }); - - instance.autorun(function () { - let currentOptions = instance.state.get('logLevelsAsOptions'); - instance.subscribe('constants'); - - let tempOptions = []; - - let addToOptionsDebounced = _.debounce(() => { - if (currentOptions.length === tempOptions.length) { - let result = R.intersectionWith(R.eqBy(R.prop('value')), tempOptions, currentOptions); - if (result.length === currentOptions.length) { - return; - } - } - - instance.state.set('logLevelsAsOptions', tempOptions); - }, 250); - - Constants.find({ name: 'log_levels' }).forEach((logLevelsRec) => { - let logLevels = logLevelsRec.data; - R.map((logLevel) => { - let option = logLevelToOption(logLevel); - tempOptions = R.unionWith(R.eqBy(R.prop('value')), [option], tempOptions); - addToOptionsDebounced(); - }, logLevels); - }); - - }); - - instance.autorun(function () { - let action = instance.state.get('action'); - let _id = instance.state.get('_id'); - let env = instance.state.get('env'); - - R.cond([ - [R.equals('insert'), _x => initInsertView(instance, env)], - [R.equals('update'), _x => initUpdateView(instance, _id)], - [R.equals('view'), _x => initViewView(instance, _id)], - [R.equals('remove'), _x => initRemoveView(instance, _id)], - [R.T, x => { throw `unimplemented action: ${R.toString(x)}`; }] - ])(action); - }); -}); - -/* -Template.ScheduledScan.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ScheduledScan.events({ - 'submit .sm-item-form': function(event, instance) { - event.preventDefault(); - let model = instance.state.get('model'); - - submitItem(instance, model); - } -}); - -/* - * Helpers - */ - -Template.ScheduledScan.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - }, - - asJson: function (val) { - return JSON.stringify(val); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - modelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - envsAsOptions: function () { - let instance = Template.instance(); - return instance.state.get('envsAsOptions'); - }, - - onInputInventoryFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'inventory') }; - }, - - onInputObjectIdFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'object_id') }; - }, - - onInputClearFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'clear') }; - }, - - onInputEnvFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'environment') }; - }, - - onInputLogLevelFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'log_level') }; - }, - - onInputFreqFn: function () { - let instance = Template.instance(); - return { fn: createSetModelFn(instance, 'freq') }; - }, - - argsSelect: function (args) { - //let instance = Template.instance(); - let classStr = args.hash.classStr; - let options = args.hash.options; - let selectedValue = args.hash.selectedValue; - let onInput = args.hash.onInput; - let disabled = args.hash.disabled; - - return { - classStr: classStr, - selectedValue: selectedValue, - isDisabled: disabled, - options: options, - onInput: onInput, - }; - }, - - scanOnlyFieldOptions: function () { - return [ - { label: 'Full scan', value: '_full_scan' }, - { label: 'Scan only inventory', value: 'scan_only_inventory' }, - { label: 'Scan only links', value: 'scan_only_links' }, - { label: 'Scan only cliques', value: 'scan_only_cliques' }, - ]; - }, - - scanOnlyFieldInputFn: function () { - let instance = Template.instance(); - - return { - fn: function (newFieldName) { - let model = instance.state.get('model'); - model = R.reduce((acc, fieldName) => { - return R.assoc(fieldName, false, acc); - }, model, scansOnlyFields); - - if (newFieldName === '_full_scan') { - console.log('full scan selected. all scan_only_ fields are reset'); - } else { - model = R.assoc(newFieldName, true, model); - } - instance.state.set('model', model); - } - }; - }, - - scanOnlyFieldsSelectedValue: function () { - let instance = Template.instance(); - let model = instance.state.get('model'); - if (R.isNil(model)) { return null; } - - let selectedValue = R.find((fieldName) => { - return R.prop(fieldName, model) === true; - }, scansOnlyFields); - - if (R.isNil(selectedValue)) { - selectedValue = '_full_scan'; - } - return selectedValue; - }, - - argsRadios: function (options, onInputFn, selectedValue) { - return { - inputClasses: 'cl-input', - options: options, - selectedValue: selectedValue, - onInput: onInputFn, - }; - }, - - freqsAsOptions: function () { - return [ - { label: 'Yearly', value: 'YEARLY' }, - { label: 'Monthly', value: 'MONTHLY' }, - { label: 'Weekly', value: 'WEEKLY' }, - { label: 'Daily', value: 'DAILY' }, - { label: 'Hourly', value: 'HOURLY' }, - ]; - }, - - argsInput: function (args) { - let classStr = args.hash.classStr; - let placeholder = args.hash.placeholder; - let inputValue = args.hash.inputValue; - let inputType = args.hash.inputType; - let onInput = args.hash.onInput; - let disabled = args.hash.disabled; - - return { - inputValue: inputValue, - inputType: inputType, - classStr: classStr, - placeholder: placeholder, - isDisabled: disabled, - onInput: onInput, - }; - }, - - getEnvsAsOptions: function () { - let instance = Template.instance(); - return instance.state.get('envsAsOptions'); - }, - - logLevelsAsOptions: function () { - let instance = Template.instance(); - return instance.state.get('logLevelsAsOptions'); - }, - - isGenDisabled: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - if (R.contains(action, ['view', 'remove'])) { - return true; - } - - return false; - }, - - getRecurrenceText: function (model) { - if (R.isNil(model)) { return ''; } - - let rule = new RRule({ - freq: RRule[model.freq] - }); - - return rule.toText(); - }, - - getNextRunText: function (model) { - if (R.isNil(model)) { return ''; } - if (R.isNil(model.scheduled_timestamp)) { return ''; } - - let next = moment(model.scheduled_timestamp); - return next.fromNow(); - }, -}); // end: helpers - - -function initInsertView(instance, env) { - instance.state.set('model', ScheduledScans.schema.clean({ - environment: env, - })); - - subscribeToOptionsData(instance); -} - -function initExistingItemView(instance, _id) { - subscribeToOptionsData(instance); - instance.subscribe(subsScheduledScansId, _id); - - ScheduledScans.find({ _id: _id }).forEach((model) => { - instance.state.set('model', model); - }); -} - -function initViewView(instance, _id) { - initExistingItemView(instance, _id); -} - -function initUpdateView(instance, _id) { - initExistingItemView(instance, _id); -} - -function initRemoveView(instance, _id) { - initExistingItemView(instance, _id); -} - -function subscribeToOptionsData(_instance) { - -} - -function envToOption(env) { - return { value: env.name, label: env.name }; -} - -function logLevelToOption(logLevel) { - return { value: logLevel.value, label: logLevel.label }; -} - -function createSetModelFn(instance, fieldName) { - return function (value) { - let model = instance.state.get('model'); - model = R.assoc(fieldName, value, model); - instance.state.set('model', model); - }; -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - case 'update': - return 'Update'; - default: - return 'Submit'; - } -} - -function submitItem( - instance, - model -) { - - let action = instance.state.get('action'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - environment: model.environment, - object_id: model.object_id, - log_level: model.log_level, - clear: model.clear, - scan_only_inventory: model.scan_only_inventory, - scan_only_links: model.scan_only_links, - scan_only_cliques: model.scan_only_cliques, - freq: model.freq, - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: model._id, - environment: model.environment, - object_id: model.object_id, - log_level: model.log_level, - clear: model.clear, - scan_only_inventory: model.scan_only_inventory, - scan_only_links: model.scan_only_links, - scan_only_cliques: model.scan_only_cliques, - freq: model.freq, - }, processActionResult.bind(null, instance)); - break; - - case 'remove': - remove.call({ - _id: model._id, - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - return; - } - - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - switch (action) { - case 'insert': - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - break; - - case 'remove': - instance.state.set('message', 'Record had been removed successfully'); - instance.state.set('disabled', true); - break; - - case 'update': - instance.state.set('message', 'Record had been updated successfully'); - break; - } - - //Router.go('/link-types-list'); - setTimeout(() => { - instance.state.set('reload', Date.now()); - }, 7000); -} diff --git a/ui/imports/ui/components/scheduled-scan/scheduled-scan.styl b/ui/imports/ui/components/scheduled-scan/scheduled-scan.styl deleted file mode 100644 index ac64dd3..0000000 --- a/ui/imports/ui/components/scheduled-scan/scheduled-scan.styl +++ /dev/null @@ -1,34 +0,0 @@ -.os-scheduled-scan - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 170px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; diff --git a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.html b/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.html deleted file mode 100644 index a796562..0000000 --- a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.html +++ /dev/null @@ -1,72 +0,0 @@ - - diff --git a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.js b/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.js deleted file mode 100644 index bbdcfe7..0000000 --- a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.js +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Template Component: ScheduledScansList - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Counts } from 'meteor/tmeasday:publish-counts'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { ScheduledScans, - subsScheduledScansPageAmountSorted, - subsScheduledScansPageAmountSortedCounter, -} from '/imports/api/scheduled-scans/scheduled-scans'; - -import '/imports/ui/components/pager/pager'; - -import './scheduled-scans-list.html'; - -/* - * Lifecycles - */ - -Template.ScheduledScansList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - env: null, - page: 1, - amountPerPage: 10, - sortField: 'submit_timestamp', - sortDirection: -1, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - }).validate(data); - }); - - instance.autorun(function () { - let amountPerPage = instance.state.get('amountPerPage'); - let page = instance.state.get('page'); - let sortField = instance.state.get('sortField'); - let sortDirection = instance.state.get('sortDirection'); - - instance.subscribe(subsScheduledScansPageAmountSorted, - page, amountPerPage, sortField, sortDirection); - }); -}); - -/* -Template.ScheduledScansList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ScheduledScansList.events({ - 'click .sm-table-header': function (event, instance) { - event.preventDefault(); - let isSortable = event.target.dataset.isSortable; - if (! isSortable ) { return; } - - let sortField = event.target.dataset.sortField; - let currentSortField = instance.state.get('sortField'); - let currentSortDirection = instance.state.get('sortDirection'); - - if (sortField === currentSortField) { - let sortDirection = null; - if (currentSortDirection === null) { - sortDirection = -1; - } else if (currentSortDirection === -1) { - sortDirection = 1; - } else if (currentSortDirection === 1) { - sortField = null; - sortDirection = null; - } else { - sortField = null; - sortDirection = null; - } - - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', sortDirection); - - } else { - instance.state.set('sortField', sortField); - instance.state.set('sortDirection', -1); - } - }, -}); - -/* - * Helpers - */ - -Template.ScheduledScansList.helpers({ - scheduledScans: function () { - let instance = Template.instance(); - let page = instance.state.get('page'); - let amountPerPage = instance.state.get('amountPerPage'); - let sortField = instance.state.get('sortField'); - let sortDirection = instance.state.get('sortDirection'); - - let skip = (page - 1) * amountPerPage; - let sortParams = {}; - sortParams = R.ifElse(R.isNil, R.always(sortParams), - R.assoc(R.__, sortDirection, sortParams))(sortField); - - let qParams = { - limit: amountPerPage, - skip: skip, - sort: sortParams, - }; - - return ScheduledScans.find({}, qParams); - }, - - currentPage: function () { - let instance = Template.instance(); - return instance.state.get('page'); - }, - - amountPerPage: function () { - let instance = Template.instance(); - return instance.state.get('amountPerPage'); - }, - - totalItems: function () { - let counterName = subsScheduledScansPageAmountSortedCounter; - - return Counts.get(counterName); - }, - - argsPager: function (currentPage, amountPerPage, totalItems) { - let instance = Template.instance(); - let totalPages = Math.ceil(totalItems / amountPerPage); - - return { - disableNext: currentPage * amountPerPage > totalItems, - disablePrev: currentPage == 1, - totalPages: totalPages, - currentPage: currentPage, - onReqNext: function () { - console.log('next'); - let page = (currentPage * amountPerPage > totalItems) ? currentPage : currentPage + 1; - instance.state.set('page', page); - }, - onReqPrev: function () { - console.log('prev'); - let page = (currentPage == 1) ? currentPage : currentPage - 1; - instance.state.set('page', page); - }, - onReqFirst: function () { - console.log('req first'); - instance.state.set('page', 1); - }, - onReqLast: function () { - console.log('req last'); - instance.state.set('page', totalPages); - }, - onReqPage: function (pageNumber) { - console.log('req page'); - let page; - if (pageNumber <= 1) { - page = 1; - } else if (pageNumber > Math.ceil(totalItems / amountPerPage)) { - page = totalPages; - } else { - page = pageNumber; - } - - instance.state.set('page', page); - }, - }; - }, - - fieldSortClass: function (fieldName) { - let instance = Template.instance(); - let classes = 'fa fa-sort'; - if (fieldName === instance.state.get('sortField')) { - let sortDirection = instance.state.get('sortDirection'); - if (sortDirection === -1) { - classes = 'fa fa-sort-desc'; - } else if (sortDirection === 1) { - classes = 'fa fa-sort-asc'; - } - } - - return classes; - }, -}); // end: helpers - - diff --git a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.styl b/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.styl deleted file mode 100644 index bd2f7c0..0000000 --- a/ui/imports/ui/components/scheduled-scans-list/scheduled-scans-list.styl +++ /dev/null @@ -1,33 +0,0 @@ -.os-scheduled-scans-list - display: flex; - flex-flow: column nowrap; - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-scheduled-scans-table - th - color: spark-blue - - a - color: spark-blue; - cursor: pointer; - i.fa - padding: 0px 3px; - font-size: small; - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-pager-section - display: flex; - justify-content: center; - diff --git a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.html b/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.html deleted file mode 100644 index bd5e0e2..0000000 --- a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.html +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.js b/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.js deleted file mode 100644 index cfc706b..0000000 --- a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete-list.js +++ /dev/null @@ -1,167 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: SearchAutoCompleteList - */ - -//import { Meteor } from 'meteor/meteor'; -import * as R from 'ramda'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { EJSON } from 'meteor/ejson'; -import { _idFieldDef } from '/imports/lib/simple-schema-utils'; - -//import { store } from '/imports/ui/store/store'; - -import '../auto-search-result-line/auto-search-result-line'; - -import './search-auto-complete-list.html'; - -/* - * Lifecycles - */ - -Template.SearchAutoCompleteList.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - isOpen: false, - envId: null, - searchTerm: null, - results: [], - }); - - instance.currentData = new ReactiveVar(null, EJSON.equals); - instance.autorun((function(_this) { - return function(_computation) { - return _this.currentData.set(Template.currentData()); - }; - })(instance)); - - instance.autorun(function () { - let data = instance.currentData.get(); - - new SimpleSchema({ - isOpen: { type: Boolean }, - envId: R.merge(_idFieldDef, { optional: true }), - searchTerm: { type: String, optional: true }, - onResultSelected: { type: Function }, - onCloseReq: { type: Function }, - }).validate(data); - - instance.state.set('isOpen', data.isOpen); - instance.state.set('envId', data.envId); - instance.state.set('searchTerm', data.searchTerm); - - instance.onCloseReq = R.defaultTo(() => console.log('close requested'), data.onCloseReq); - }); - - instance.opCounter = 0; - - instance.autorun(function () { - let envId = instance.state.get('envId'); - let searchTerm = instance.state.get('searchTerm'); - performSearch(searchTerm, envId, - function getLastOpCounter() { - return instance.opCounter; - }, - function setLastOpCounter(opCounter) { - instance.opCounter = opCounter; - } - ).then(function (results) { - instance.state.set('results', results); - }); - }); - -}); - -/* -Template.SearchAutoCompleteList.rendered = function() { -}; -*/ - -Template.SearchAutoCompleteList.onDestroyed(() => { -}); - -/* - * Events - */ - -Template.SearchAutoCompleteList.events({ - 'click .sm-backdrop': function (event, instance) { - instance.onCloseReq(); - } -}); // end - events - -/* - * Helpers - */ - -Template.SearchAutoCompleteList.helpers({ - searchResults: function () { - let instance = Template.instance(); - return instance.state.get('results'); - }, - - createAutoSearchResultLineArgs: function (resultItem) { - let instance = Template.instance(); - - return { - namePath: resultItem.name_path, - objectName: resultItem.object_name, - objectType: resultItem.type, - environment: resultItem.environment, - onClick() { - instance.data.onResultSelected(resultItem); - } - }; - }, - -}); // end - helpers - -function performSearch( - searchTerm, - envId, - getLastOpCounterFn, - setLastOpCounterFn -) { - return new Promise((resolve, reject) => { - let results = []; - let opCounter = getLastOpCounterFn() + 1; - setLastOpCounterFn(opCounter); - - Meteor.apply('inventorySearch', [ - searchTerm, envId, opCounter, - ], { - wait: false - }, function (err, res) { - if (err) { - console.error(R.toString(err)); - reject(err); - return; - } - - let currentOpCounter = getLastOpCounterFn(); - if (res.opCounter !== currentOpCounter) { - reject('stale search result'); - return; - } - - R.forEach((resultItem) => { - results = R.append(resultItem, results); - }, res.searchResults); - - resolve(results); - return; - }); - }); -} diff --git a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete.styl b/ui/imports/ui/components/search-auto-complete-list/search-auto-complete.styl deleted file mode 100644 index 4bd2998..0000000 --- a/ui/imports/ui/components/search-auto-complete-list/search-auto-complete.styl +++ /dev/null @@ -1,28 +0,0 @@ -.os-search-auto-complete-list - - .sm-search-auto-complete-list - display: none - list-style: none; - -webkit-padding-start: 0px; - position: relative; - z-index: 4; - - .sm-search-auto-complete-list.cl-open - display: block - background: rgba(255, 255, 255, 0.98); - color: black; - border: 1px solid #d0d0d0; - border-radius: 0 0 2px 2px; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); - - .sm-search-auto-complete-list.cl-open:empty - display: none; - - .sm-backdrop - width: 100vw; - height: 100vh; - //background-color: rgba(82, 192, 245, 0.58); - position: fixed; - z-index: 3; - top: 0; - left: 0; diff --git a/ui/imports/ui/components/select-model/select-model.html b/ui/imports/ui/components/select-model/select-model.html deleted file mode 100644 index 71b9c81..0000000 --- a/ui/imports/ui/components/select-model/select-model.html +++ /dev/null @@ -1,23 +0,0 @@ - - diff --git a/ui/imports/ui/components/select-model/select-model.js b/ui/imports/ui/components/select-model/select-model.js deleted file mode 100644 index 01fca9c..0000000 --- a/ui/imports/ui/components/select-model/select-model.js +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: SelectModel - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import * as R from 'ramda'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './select-model.html'; - -/* - * Lifecycles - */ - -Template.SelectModel.onCreated(function() { -}); - -/* -Template.SelectModel.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.SelectModel.events({ - 'change .js-select': function (event) { - event.stopPropagation(); - event.preventDefault(); - - let instance = Template.instance(); - // Extract string values from select element's attribute. - let elementSelectedValues = R.map(function (optionEl) { - return optionEl.value; - }, event.target.selectedOptions); - - let selectedValues = instance.data.multi ? elementSelectedValues : - elementSelectedValues[0]; - - if (instance.data.setModel) { - instance.data.setModel(selectedValues); - } - } -}); - -/* - * Helpers - */ - -Template.SelectModel.helpers({ - isSelected: function (optionValue) { - let instance = Template.instance(); - let selectedValues = instance.data.values; - - if (R.isNil(selectedValues)) { return false; } - return R.contains(optionValue, selectedValues); - }, - markIfDisabled: function () { - let instance = Template.instance(); - let attrs = {}; - if (instance.data.disabled) { - attrs = R.assoc('disabled', true, attrs); - } - - return attrs; - } -}); - - diff --git a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.html b/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.html deleted file mode 100644 index 6b81a8f..0000000 --- a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.js b/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.js deleted file mode 100644 index 15c46fe..0000000 --- a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.js +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Template Component: SelectableOrderedInput - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - -import './selectable-ordered-input.html'; - -/* - * Lifecycles - */ - -Template.SelectableOrderedInput.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - choices: [], - currentChoices: [], - currentProduct: [], - selectedChoice: null, - selectedProductOption: null, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - choices: { type: [Object], blackbox: true }, - product: { type: [Object], blackbox: true }, - onProductChange: { type: Function }, - }).validate(data); - - instance.state.set('choices', data.choices); - instance.state.set('product', data.product); - instance.onProductChange = R.defaultTo((_x) => {}, data.onProductChange); - }); - - instance.autorun(function () { - let choices = instance.state.get('choices'); - let product = instance.state.get('product'); - - let currentChoices = R.differenceWith((choice, product) => choice.value === product.value, - choices, product); - - instance.state.set('currentChoices', currentChoices); - instance.state.set('currentProduct', product); - instance.state.set('selectedChoice', null); - instance.state.set('selectedProductOption', null); - }); - - let lastCurrentProduct = null; - instance.autorun(function () { - let currentProduct = instance.state.get('currentProduct'); - if (R.isNil(lastCurrentProduct)) { - lastCurrentProduct = currentProduct; - return; - } - - if (R.equals(lastCurrentProduct, currentProduct)) { - return; - } - - lastCurrentProduct = currentProduct; - instance.onProductChange(currentProduct); - }); - -}); - -/* -Template.SelectableOrderedInput.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.SelectableOrderedInput.events({ - 'click .sm-add-choice-btn': function (event, instance) { - event.preventDefault(); - - moveSelectedChoiceToProduct(instance); - }, - - 'click .sm-remove-choice-btn': function (event, instance) { - event.preventDefault(); - - moveSelectedProductOptionToChoices(instance); - }, - - 'click .sm-move-up-product-btn': function (event, instance) { - event.preventDefault(); - - moveSelectedProductOptionUp(instance); - }, - - 'click .sm-move-down-product-btn': function (event, instance) { - event.preventDefault(); - - moveSelectedProductOptionDown(instance); - }, -}); - -/* - * Helpers - */ - -Template.SelectableOrderedInput.helpers({ - argsChoicesSelect: function (choices, selectedValue) { - let instance = Template.instance(); - - return { - classStr: 'cl-input', - //isDisabled:, - selectedValue: selectedValue, - size: 7, - options: choices, - onInput: { - fn: function (choice) { - let choices = instance.state.get('currentChoices'); - let fullChoice = R.find(R.propEq('value', choice), choices); - instance.state.set('selectedChoice', fullChoice); - } - }, - }; - }, - - currentChoices: function () { - let instance = Template.instance(); - return instance.state.get('currentChoices'); - }, - - argsProductSelect: function (currentProduct, selectedProductOptValue) { - let instance = Template.instance(); - - return { - classStr: 'cl-input', - //isDisabled:, - selectedValue: selectedProductOptValue, - size: 7, - options: currentProduct, - onInput: { - fn: function (productOption) { - let product = instance.state.get('currentProduct'); - let fullProductOption = R.find(R.propEq('value', productOption), product); - instance.state.set('selectedProductOption', fullProductOption); - } - }, - }; - }, - - currentProduct: function () { - let instance = Template.instance(); - return instance.state.get('currentProduct'); - }, - - selectedChoiceValue: function () { - let instance = Template.instance(); - return R.path(['value'], instance.state.get('selectedChoice')); - }, - - selectedProductOptValue: function () { - let instance = Template.instance(); - return R.path(['value'], instance.state.get('selectedProductOption')); - }, -}); // end: helpers - -function moveSelectedChoiceToProduct(instance) { - let selectedChoice = instance.state.get('selectedChoice'); - if (R.isNil(selectedChoice)) { return; } - - // remove selected choice from choices. - let choices = instance.state.get('currentChoices'); - choices = R.reject(R.propEq('value', selectedChoice.value), choices); - instance.state.set('currentChoices', choices); - - // add selected choice to product. - let product = instance.state.get('currentProduct'); - product = R.append(selectedChoice, product); - instance.state.set('currentProduct', product); - - // clear selected choice - instance.state.set('selectedChoice', null); -} - -function moveSelectedProductOptionToChoices(instance) { - let selectedProductOption = instance.state.get('selectedProductOption'); - if (R.isNil(selectedProductOption)) { return; } - - // remove selected option from product - let product = instance.state.get('currentProduct'); - product = R.reject(R.propEq('value', selectedProductOption.value), product); - instance.state.set('currentProduct', product); - - // add selected option to choices - let choices = instance.state.get('currentChoices'); - choices = R.append(selectedProductOption, choices); - instance.state.set('currentChoices', choices); - - // clear selection product option - instance.state.set('selectedProductOption', null); -} - -function moveSelectedProductOptionUp(instance) { - // get selected product option. exit if null. - let selectedProductOption = instance.state.get('selectedProductOption'); - if (R.isNil(selectedProductOption)) { return; } - - // move product option up. - let product = instance.state.get('currentProduct'); - let index = R.findIndex(R.propEq('value', selectedProductOption.value), product); - if (index === 0) { return; } - product = R.remove(index, 1, product); - product = R.insert(index - 1, selectedProductOption, product); - instance.state.set('currentProduct', product); -} - -function moveSelectedProductOptionDown(instance) { - // get selected product option. exit if null. - let selectedProductOption = instance.state.get('selectedProductOption'); - if (R.isNil(selectedProductOption)) { return; } - - // move product option down. - let product = instance.state.get('currentProduct'); - let index = R.findIndex(R.propEq('value', selectedProductOption.value), product); - if (index === product.length - 1) { return; } - - product = R.remove(index, 1, product); - product = R.insert(index + 1, selectedProductOption, product); - instance.state.set('currentProduct', product); -} diff --git a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.styl b/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.styl deleted file mode 100644 index e18358b..0000000 --- a/ui/imports/ui/components/selectable-ordered-input/selectable-ordered-input.styl +++ /dev/null @@ -1,30 +0,0 @@ -.os-selectable-ordered-input - display: flex; - flex-flow: row nowrap; - - .cl-action-btn - width: 33px; - height: 29px; - font-size: 5px; - margin: 3px; - - .sm-choices-section - flex: 1; - - .sm-product-section - flex: 1; - - .sm-choices-product-actions-bar - flex: 0; - display: flex; - flex-flow: column nowrap; - justify-content: center; - - padding: 0 6px; - - .sm-product-actions-bar - flex: 0; - display: flex; - flex-flow: column nowrap; - justify-content: center; - padding: 0 6px; diff --git a/ui/imports/ui/components/time-selection-widget/time-selection-widget.html b/ui/imports/ui/components/time-selection-widget/time-selection-widget.html deleted file mode 100644 index ba808c7..0000000 --- a/ui/imports/ui/components/time-selection-widget/time-selection-widget.html +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/ui/imports/ui/components/time-selection-widget/time-selection-widget.js b/ui/imports/ui/components/time-selection-widget/time-selection-widget.js deleted file mode 100644 index f61ac50..0000000 --- a/ui/imports/ui/components/time-selection-widget/time-selection-widget.js +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: TimeSelectionWidget - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -//import { ReactiveDict } from 'meteor/reactive-dict'; - -import './time-selection-widget.html'; - -/* - * Lifecycles - */ - -Template.TimeSelectionWidget.onCreated(function() { -}); - -/* -Template.TimeSelectionWidget.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.TimeSelectionWidget.events({ -}); - -/* - * Helpers - */ - -Template.TimeSelectionWidget.helpers({ -}); - - diff --git a/ui/imports/ui/components/time-selection-widget/time-selection-widget.styl b/ui/imports/ui/components/time-selection-widget/time-selection-widget.styl deleted file mode 100644 index c10e7af..0000000 --- a/ui/imports/ui/components/time-selection-widget/time-selection-widget.styl +++ /dev/null @@ -1,5 +0,0 @@ -.os-time-selection-widget - width: 450px; - - input.form-control - width: 70px; diff --git a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.html b/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.html deleted file mode 100644 index 0b87521..0000000 --- a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.html +++ /dev/null @@ -1,59 +0,0 @@ - - diff --git a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.js b/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.js deleted file mode 100644 index 1b86cad..0000000 --- a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.js +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: TopNavbarMenu - */ - -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -//import * as R from 'ramda'; - -import { store } from '/imports/ui/store/store'; -//import { setSearchTerm } from '/imports/ui/actions/search-interested-parties'; -//import { notifySearchAutoCompleteTermChanged } from '/imports/ui/actions/search-interested-parties'; -import { idToStr } from '/imports/lib/utilities'; -import factory from 'reactive-redux'; - -import '/imports/ui/components/search-auto-complete-list/search-auto-complete-list'; -import '/imports/ui/components/get-started/get-started'; -import '/imports/ui/components/env-form/env-form'; -import '/imports/ui/components/alarm-icons/alarm-icons'; - -import './top-navbar-menu.html'; - -/* - * Lifecycles - */ - -Template.TopNavbarMenu.onCreated(function () { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - isAutoCompleteOpen: false, - searchTerm: null - }); - - const mainEnvIdSelector = (state) => (state.components.mainApp.selectedEnvironment._id); - instance.rdxMainEnvId = factory(mainEnvIdSelector, store); - - instance.tempSearchTerm = null; - instance.searchDebounced = _.debounce(function () { - instance.state.set('searchTerm', instance.tempSearchTerm); - instance.state.set('isAutoCompleteOpen', true); - }, 250); -}); - -Template.TopNavbarMenu.onDestroyed(function () { - //let instance = this; -}); - -Template.TopNavbarMenu.events = { - 'keyup #search': function (event) { - let instance = Template.instance(); - let searchTerm = instance.$(event.target).val(); - - instance.tempSearchTerm = searchTerm; - instance.searchDebounced(); - }, - - 'click .os-nav-link': function () { - let instance = Template.instance(); - instance.state.set('isAutoCompleteOpen', false); - }, - - 'click .sm-dashboard-link': function () { - Router.go('Dashboard'); - }, - - 'click .sm-get-started-link': function () { - Router.go('getstarted'); - } -}; - -Template.TopNavbarMenu.helpers({ - envId: function () { - let instance = Template.instance(); - return instance.rdxMainEnvId.get(); - }, - - searchTerm: function () { - let instance = Template.instance(); - return instance.state.get('searchTerm'); - }, - - argsSearch: function (envId, searchTerm) { - let instance = Template.instance(); - - return { - isOpen: instance.state.get('isAutoCompleteOpen'), - envId: envId, - searchTerm: searchTerm, - onResultSelected(node) { - instance.state.set('isAutoCompleteOpen', false); - - let searchInput = instance.$('input#search'); - searchInput.val(node.name_path); - - Router.go('environment', { _id: idToStr(node._envId) }, { - query: { selectedNodeId: idToStr(node._id) } - }); - }, - onCloseReq() { - instance.state.set('isAutoCompleteOpen', false); - - let searchInput = instance.$('input#search'); - searchInput.val(null); - }, - }; - }, - - argsEnvForm: function () { - let instance = Template.instance(); - let selectedEnvironment = instance.state.get('selectedEnvironment'); - - return { - selectedEnvironment: selectedEnvironment, - onEnvSelected: function (env) { - Router.go('environment', { _id: idToStr(env._id) }, { query: `r=${Date.now()}` }); - } - }; - } - -}); // end: helpers diff --git a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.styl b/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.styl deleted file mode 100644 index 0a49678..0000000 --- a/ui/imports/ui/components/top-navbar-menu/top-navbar-menu.styl +++ /dev/null @@ -1,23 +0,0 @@ -.os-topnavbarmenu - .os-nav-link - cursor: pointer; - - .sm-dashboard-link - display: flex; - - .sm-navbar-header - .sm-navbar-brand-container - display: flex; - - .sm-cisco-logo - width: 40px; - - .sm-calipso-logo - width: 40px; - - .sm-project-label - color: white; - font-size: medium; - - .cl-item - margin: 0px 10px diff --git a/ui/imports/ui/components/tree-node/tree-node.html b/ui/imports/ui/components/tree-node/tree-node.html deleted file mode 100644 index 87f5f1e..0000000 --- a/ui/imports/ui/components/tree-node/tree-node.html +++ /dev/null @@ -1,58 +0,0 @@ - - diff --git a/ui/imports/ui/components/tree-node/tree-node.js b/ui/imports/ui/components/tree-node/tree-node.js deleted file mode 100644 index 7a79314..0000000 --- a/ui/imports/ui/components/tree-node/tree-node.js +++ /dev/null @@ -1,419 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: TreeNode - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { EJSON } from 'meteor/ejson'; -//import { ReactiveDict } from 'meteor/reactive-dict'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { InventoryTreeNodeBehavior } from '/imports/ui/lib/inventory-tree-node-behavior'; -import * as R from 'ramda'; -import { calcColorMem } from '/imports/lib/utilities'; -import 'jquery.scrollto'; - -import './tree-node.html'; - -/* - * Lifecycles - */ - -Template.TreeNode.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - node: null, - openState: 'closed', - orderDataSubscribe: { counter: 0, data: { node: null, forOpen: false } }, - needOpenCloseAnimation: { counter: 0, data: { type: 'opening', node: null } }, - positionNeeded: false, - scrollToNodeIsNeeded: false, - }); - - //console.log('tree-node - on create', R.path(['data', 'node', '_id', '_str'], instance)); - - //let oldData = null; - - createAttachedFns(instance); - - instance.currentData = new ReactiveVar(null, EJSON.equals); - - instance.autorun((function(_this) { - return function(_computation) { - return _this.currentData.set(Template.currentData()); - }; - })(instance)); - - instance.autorun(function () { - //let data = Template.currentData(); - let data = instance.currentData.get(); - //let data = instance.data; - - new SimpleSchema({ - behavior: { - type: { isOpenDefault: { type: Boolean } }, - blackbox: true - }, - showDetailsLine: { type: Boolean }, - openState: { type: String }, - node: { type: Object, blackbox: true }, - children: { type: [Object], blackbox: true }, - childDetected: { type: Boolean }, - needChildDetection: { type: Boolean }, - linkDetected: { type: Boolean }, - level: { type: Number }, - positionNeeded: { type: Boolean }, - scrollToNodeIsNeeded: { type: Boolean }, - onResetChildren: { type: Function }, - onChildRead: { type: Function }, - onChildrenRead: { type: Function }, - onStartOpenReq: { type: Function }, - onOpeningDone: { type: Function }, - onStartCloseReq: { type: Function }, - onClosingDone: { type: Function }, - onChildDetected: { type: Function }, - onNodeSelected: { type: Function }, - onPositionRetrieved: { type: Function }, - onScrollToNodePerformed: { type: Function }, - onOpenLinkReq: { type: Function }, - onResetNeedChildDetection: { type: Function }, - }).validate(data); - - instance.state.set('openState', data.openState); - instance.state.set('node', data.node); - instance.state.set('positionNeeded', data.positionNeeded); - instance.state.set('scrollToNodeIsNeeded', data.scrollToNodeIsNeeded); - instance.state.set('needChildDetection', data.needChildDetection); - - //console.log('tree-node - main autorun - ' + data.node._id._str); - - /* - R.forEach((keyName) => { - if (R.isNil(oldData)) { return; } - - if (! R.equals(R.prop(keyName, data), R.prop(keyName, oldData)) ) { - console.log('tree-node - main autorun - prop change: ' + keyName); - //R.path([keyName], data), R.path([keyName], oldData)); - } - }, R.keys(data)); - - if (oldData !== data) { console.log('tree-node - main autorn - data ob change'); } - - oldData = data; - */ - - }); - - instance.autorun(function () { - let node = instance.state.get('node'); - let openState = instance.state.get('openState'); - - switch (openState) { - case 'start_open': - issueOrder(instance, 'orderDataSubscribe', { node: node, forOpen: true }); - setTimeout(() => { - instance.data.onOpeningDone([node._id._str], node); - }, 400); - break; - case 'opened': - issueOrder(instance, 'needOpenCloseAnimation', { type: 'opening', node: node}); - break; - case 'start_close': - issueOrder(instance, 'needOpenCloseAnimation', { type: 'closing', node: node }); - setTimeout(() => { - instance.data.onClosingDone([node._id._str]); - }, 200); - break; - case 'closed': - issueOrder(instance, 'orderDataSubscribe', { node: node, forOpen: false }); - break; - } - }); - - instance.autorun(() => { - let order = instance.state.get('orderDataSubscribe'); - if (order.counter == 0) { return; } - - instance.data.onResetChildren(R.append(R.path(['_id', '_str'], order.data.node), [])); - // console.log('reset children in autoron order data sub: ' + order.data.node._id._str); - - if (order.data.forOpen) { - instance.data.behavior.subscribeGetChildrenFn(instance, order.data.node); - - let children = []; - let onChildReadThrottle = _.throttle(() => { - instance.data.onChildrenRead([ order.data.node._id._str ], children); - children = []; - }, 200); - - instance.data.behavior.getChildrenFn(order.data.node).forEach((child) => { - // todo: aggregate the collection into threshold and then dispatch. - // debounce/throttle - // https://lodash.com/docs#debounce - - //instance.data.onChildRead( - // [order.data.node._id._str, child._id._str], child); - - children = R.append(child, children); - onChildReadThrottle(); - }); - } - }); - - instance.autorun(() => { - //let needChildDetection = - instance.state.get('needChildDetection'); - let data = instance.data; - - instance.data.behavior.subscribeGetFirstChildFn(instance, data.node); - // todo: let childDetectedSubmited = false; - instance.data.behavior.getChildrenFn(data.node).forEach((_child) => { - instance.data.onChildDetected([data.node._id._str]); - }); - - instance.data.onResetNeedChildDetection([data.node._id._str]); - }); - - instance.autorun(function () { - let positionNeeded = instance.state.get('positionNeeded'); - - if (positionNeeded) { - let el = instance.$('>.os-tree-node')[0]; - let rect = el.getBoundingClientRect(); - instance.data.onPositionRetrieved([instance.data.node._id._str], rect); - } - }); - - instance.autorun(function () { - let scrollToNodeIsNeeded = instance.state.get('scrollToNodeIsNeeded'); - - if (scrollToNodeIsNeeded) { - let el = instance.$('>.os-tree-node')[0]; - let rect = el.getBoundingClientRect(); - if (rect.top < 0) { - //window.scroll(0, el.offsetTop); - $(window).scrollTo(el, 50); - instance.data.onScrollToNodePerformed([instance.data.node._id._str]); - return; - } - - let childrenCont = instance.$('>.os-tree-node > .sm-children-list')[0]; - let childrenRect = childrenCont.getBoundingClientRect(); - if (childrenRect.bottom > window.innerHeight) { - let scrollPos = childrenRect.bottom - window.innerHeight; - scrollPos = window.scrollY + scrollPos; - if ((window.scrollY + rect.top) < scrollPos) { - scrollPos = window.scrollY + rect.top; - } - $(window).scrollTo(scrollPos, 50); - } - - instance.data.onScrollToNodePerformed([instance.data.node._id._str]); - } - }); - -}); - -Template.TreeNode.rendered = function() { - let instance = Template.instance(); - // Detect change in isOpen. - instance.autorun(() => { - let order = instance.state.get('needOpenCloseAnimation'); - if (order.counter == 0) { return; } - - let $childrenList; - - switch(order.data.type) { - case 'opening': - // The children list element is not present on first isOpen change render. We - // need to wait out of loop inorder to let the render first render to list then - // we animate the opening/closing action. - - //$childrenList = instance.$('>.sm-children-list'); - $childrenList = instance.$(instance.firstNode).children('.sm-children-list'); - $childrenList.slideDown(200); - break; - - case 'closing': - //$childrenList = instance.$('>.sm-children-list'); - $childrenList = instance.$(instance.firstNode).children('.sm-children-list'); - $childrenList.slideUp(200); - break; - } - - }); -}; - -/* - * Events - */ - -Template.TreeNode.events({ - 'click .sm-details-line': function (event, _instance) { - event.preventDefault(); - event.stopPropagation(); - - let data = Template.currentData(); - - if (R.pathEq(['type'], 'host_ref')(data.node)) { - data.onOpenLinkReq(data.node.environment, data.node.name); - - } else { - switch(data.openState) { - case 'opened': - R.when(R.pipe(R.isNil, R.not), - (fn) => fn([data.node._id._str]) - )(data.onStartCloseReq); - break; - - case 'closed': - R.when(R.pipe(R.isNil, R.not), - (fn) => fn([data.node._id._str]) - )(data.onStartOpenReq); - break; - } - - data.onNodeSelected(data.node); - } - } -}); - -/* - * Helpers - */ - -Template.TreeNode.helpers({ - argsChild: function (child, _node) { - let instance = Template.instance(); - //let data = Template.currentData(); - - return { - behavior: InventoryTreeNodeBehavior, - showDetailsLine: true, - openState: child.openState, - node: child.nodeInfo, - children: child.children, - childDetected: child.childDetected, - needChildDetection: child.needChildDetection, - linkDetected: child.linkDetected, - level: child.level, - positionNeeded: child.positionNeeded, - scrollToNodeIsNeeded: child.scrollToNodeIsNeeded, - onChildRead: instance._fns.onChildRead, - onChildrenRead: instance._fns.onChildrenRead, - onResetChildren: instance._fns.onResetChildren, - onStartOpenReq: instance._fns.onStartOpenReq, - onOpeningDone: instance._fns.onOpeningDone, - onStartCloseReq: instance._fns.onStartCloseReq, - onClosingDone: instance._fns.onClosingDone, - onChildDetected: instance._fns.onChildDetected, - onNodeSelected: instance._fns.onNodeSelected, - onPositionRetrieved: instance._fns.onPositionRetrieved, - onScrollToNodePerformed: instance._fns.onScrollToNodePerformed, - onOpenLinkReq: instance._fns.onOpenLinkReq, - onResetNeedChildDetection: instance._fns.onResetNeedChildDetection, - }; - }, - - isOpen: function () { - let instance = Template.instance(); - return R.equals('opened', instance.state.get('openState')); - }, - - calcColor: function (level) { - return calcColorMem(level); - }, - - linkRefName: function () { - let instance = Template.instance(); - let node = instance.state.get('node'); - - if (R.isNil(node)) { return ''; } - if (R.propEq('type', 'host_ref', node)) { - return node.name; - } - - return ''; - } -}); // end: helpers - -function issueOrder(instance, name, data) { - let val = JSON.parse(instance.state.keys[name]); - val = R.merge(val, { - counter: val.counter + 1, - data: data - }); - - instance.state.set(name, val); -} - -function createAttachedFns(instance) { - - instance._fns = { - onChildRead: function (reqPath, nodeInfo) { - instance.data.onChildRead( - R.prepend(instance.data.node._id._str, reqPath), nodeInfo); - }, - onChildrenRead: function (reqPath, childrenInfo) { - instance.data.onChildrenRead( - R.prepend(instance.data.node._id._str, reqPath), childrenInfo); - }, - onResetChildren: function (reqPath) { - instance.data.onResetChildren( - R.prepend(instance.data.node._id._str, reqPath)); - }, - onStartOpenReq: (reqPath) => { - instance.data.onStartOpenReq( - R.prepend(instance.data.node._id._str, reqPath)); - }, - onOpeningDone: (reqPath, nodeInfo) => { - instance.data.onOpeningDone( - R.prepend(instance.data.node._id._str, reqPath), nodeInfo); - }, - onStartCloseReq: (reqPath) => { - instance.data.onStartCloseReq( - R.prepend(instance.data.node._id._str, reqPath)); - }, - onClosingDone: (reqPath) => { - instance.data.onClosingDone( - R.prepend(instance.data.node._id._str, reqPath)); - }, - onChildDetected: (reqPath) => { - instance.data.onChildDetected( - R.prepend(instance.data.node._id._str, reqPath)); - }, - onNodeSelected: (nodeInfo) => { - instance.data.onNodeSelected(nodeInfo); - }, - onPositionRetrieved: (reqPath, rect) => { - instance.data.onPositionRetrieved( - R.prepend(instance.data.node._id._str, reqPath), - rect - ); - }, - onScrollToNodePerformed: (reqPath) => { - instance.data.onScrollToNodePerformed( - R.prepend(instance.data.node._id._str, reqPath) - ); - }, - - onOpenLinkReq: (envName, nodeName) => { - instance.data.onOpenLinkReq(envName, nodeName); - }, - - onResetNeedChildDetection: (reqPath) => { - instance.data.onResetNeedChildDetection( - R.prepend(instance.data.node._id._str, reqPath) - ); - } - }; -} diff --git a/ui/imports/ui/components/tree-node/tree-node.styl b/ui/imports/ui/components/tree-node/tree-node.styl deleted file mode 100644 index f0b4922..0000000 --- a/ui/imports/ui/components/tree-node/tree-node.styl +++ /dev/null @@ -1,53 +0,0 @@ -.os-tree-node - display: flex; - flex-flow: column nowrap; - background-color: #0b7ad1; - - .sm-details-line - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - - padding: 14px 22px; - padding-left: 44px; - cursor: pointer; - - &:hover - background-color: #0a6ebd; - - .sm-node-desc - display: flex; - flex-flow: row nowrap; - - font-size: 11px; - line-height: 18px; - color: white; - - .sm-type-icon - i - font-size: 16px; - - .sm-space-a - width: 10px; - - //.sm-node-name - - .sm-actions-segment - display: flex; - - .fa - font-size: 10px; - width: 10px; - color: white; - margin: 0 3px; - - .sm-children-list - display: none - //height: 0 - -/* - &.cl-opened - display: block - &.cl-closed - display: none -*/ diff --git a/ui/imports/ui/components/user-list/user-list.html b/ui/imports/ui/components/user-list/user-list.html deleted file mode 100644 index 0f8c082..0000000 --- a/ui/imports/ui/components/user-list/user-list.html +++ /dev/null @@ -1,53 +0,0 @@ - - diff --git a/ui/imports/ui/components/user-list/user-list.js b/ui/imports/ui/components/user-list/user-list.js deleted file mode 100644 index 8deb24d..0000000 --- a/ui/imports/ui/components/user-list/user-list.js +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: UserList - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - -import './user-list.html'; - -/* - * Lifecycles - */ - -Template.UserList.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - }); - - instance.autorun(function () { - //let data = Template.currentData(); - - /* - var controller = Iron.controller(); - var params = controller.getParams(); - var query = params.query; - - new SimpleSchema({ - }).validate(query); - */ - - instance.subscribe('users'); - }); -}); - -/* -Template.UserList.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.UserList.events({ -}); - -/* - * Helpers - */ - -Template.UserList.helpers({ - userList: function () { - return Meteor.users.find({}); - }, - - toString: function (val) { - return R.toString(val); - } -}); - - diff --git a/ui/imports/ui/components/user-list/user-list.styl b/ui/imports/ui/components/user-list/user-list.styl deleted file mode 100644 index 5bb3d41..0000000 --- a/ui/imports/ui/components/user-list/user-list.styl +++ /dev/null @@ -1,22 +0,0 @@ -.os-user-list - margin: 20px; - - .cl-action-icon, - .card.fa.cl-action-icon - font-size: 16px !important; - - .sm-user-list-table - th - color: spark-blue - - .sm-action-bar - display: flex; - - a - margin: 0px 5px; - - .cl-action-icon - color: gray - - .sm-add-new-link - color: spark-blue diff --git a/ui/imports/ui/components/user-settings/user-settings.html b/ui/imports/ui/components/user-settings/user-settings.html deleted file mode 100644 index a157d52..0000000 --- a/ui/imports/ui/components/user-settings/user-settings.html +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/ui/imports/ui/components/user-settings/user-settings.js b/ui/imports/ui/components/user-settings/user-settings.js deleted file mode 100644 index 953a6fb..0000000 --- a/ui/imports/ui/components/user-settings/user-settings.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Template Component: UserSettings - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import * as R from 'ramda'; - -import { save } from '/imports/api/user-settings/methods'; -import { UserSettings } from '/imports/api/user-settings/user-settings'; - -import './user-settings.html'; - -/* - * Lifecycles - */ - -Template.UserSettings.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - model: UserSettings.schema.clean({}), - actionResult: 'none', - message: null, - }); - - /* - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - }).validate(data); - }); - */ - - instance.autorun(function () { - instance.subscribe('user_settings?user'); - UserSettings.find({user_id: Meteor.userId()}).forEach((userSettings) => { - instance.state.set('model', userSettings); - }); - }); -}); - -/* -Template.UserSettings.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.UserSettings.events({ - 'click .js-submit-button': function (event, instance) { - event.preventDefault(); - let msgsViewBackDelta = Number.parseInt(instance.$('.sm-msgs-view-back-delta')[0].value); - saveForm(instance, msgsViewBackDelta); - }, - - 'input .sm-msgs-view-back-delta': function (_e, instance) { - let msgsViewBackDelta = Number.parseInt(instance.$('.sm-msgs-view-back-delta')[0].value); - let model = instance.state.get('model'); - model = R.assoc('messages_view_backward_delta', msgsViewBackDelta, model); - instance.state.set('model', model); - }, -}); - -/* - * Helpers - */ - -Template.UserSettings.helpers({ - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - isActionError: function () { - let instance = Template.instance(); - return instance.state.get('actionResult') === 'error'; - }, - - isActionSuccess: function () { - let instance = Template.instance(); - return instance.state.get('actionResult') === 'success'; - }, - - durationAsText: function (delta) { - let duration = moment.duration(delta); - let text = `${duration.years()} years, ${duration.months()} months, ${duration.days()} days, ${duration.hours()} hours and ${duration.minutes()} minutes from current time.`; - return text; - }, -}); // end: helpers - -function saveForm(instance, msgsViewBackDelta) { - instance.state.set('actionResult', 'none'); - instance.state.set('message', null); - - save.call({ - messages_view_backward_delta: msgsViewBackDelta - }, (error) => { - if (error) { - instance.state.set('actionResult', 'error'); - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - return; - } - - instance.state.set('actionResult', 'success'); - instance.state.set('message', 'record has been updated succesfuly'); - }); -} diff --git a/ui/imports/ui/components/user-settings/user-settings.styl b/ui/imports/ui/components/user-settings/user-settings.styl deleted file mode 100644 index edf5e5c..0000000 --- a/ui/imports/ui/components/user-settings/user-settings.styl +++ /dev/null @@ -1,45 +0,0 @@ -.os-user-settings - display: flex; - flex-flow: column nowrap; - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 120px; - margin: 0 5px; - - .input-box - display: block; - width: 400px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - - .input-hint - position: absolute; - margin: 5px 0; - - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; diff --git a/ui/imports/ui/components/user/user.html b/ui/imports/ui/components/user/user.html deleted file mode 100644 index e7ca9b8..0000000 --- a/ui/imports/ui/components/user/user.html +++ /dev/null @@ -1,111 +0,0 @@ - - diff --git a/ui/imports/ui/components/user/user.js b/ui/imports/ui/components/user/user.js deleted file mode 100644 index 80e4870..0000000 --- a/ui/imports/ui/components/user/user.js +++ /dev/null @@ -1,366 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: User - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { parseReqId } from '/imports/lib/utilities'; -import * as R from 'ramda'; -import { remove, insert, update } from '/imports/api/accounts/methods'; -import { Environments } from '/imports/api/environments/environments'; - -import './user.html'; - -/* - * Lifecycles - */ - -Template.User.onCreated(function() { - let instance = this; - instance.state = new ReactiveDict(); - instance.state.setDefault({ - id: null, - //env: null, - action: 'insert', - isError: false, - isSuccess: false, - isMessage: false, - message: null, - disabled: false, - notifications: {}, - model: {}, - pageHeader: 'User', - viewEnvs: [], - editEnvs: [], - }); - - instance.autorun(function () { - let controller = Iron.controller(); - let params = controller.getParams(); - let query = params.query; - - new SimpleSchema({ - action: { type: String, allowedValues: ['insert', 'view', 'remove', 'update'] }, - //env: { type: String, optional: true }, - id: { type: String, optional: true } - }).validate(query); - - switch (query.action) { - case 'insert': - initInsertView(instance, query); - break; - - case 'view': - initViewView(instance, query); - break; - - case 'update': - initUpdateView(instance, query); - break; - - case 'remove': - initRemoveView(instance, query); - break; - - default: - throw 'unimplemented action'; - } - }); -}); - -/* -Template.User.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.User.events({ - 'submit .sm-item-form': function(event, instance) { - event.preventDefault(); - - let _id = instance.state.get('id'); - let username = instance.$('.sm-input-username')[0].value; - let password = instance.$('.sm-input-password')[0].value; - let viewEnvs = R.map(R.prop('value'), - instance.$('.sm-input-view-envs')[0].selectedOptions); - let editEnvs = R.map(R.prop('value'), - instance.$('.sm-input-edit-envs')[0].selectedOptions); - - submitItem(instance, - _id, - username, - password, - viewEnvs, - editEnvs - ); - } -}); - -/* - * Helpers - */ - -Template.User.helpers({ - isUpdateableAction() { - let instance = Template.instance(); - let action = instance.state.get('action'); - - return R.contains(action, ['insert', 'update', 'remove']); - }, - - getState: function (key) { - let instance = Template.instance(); - return instance.state.get(key); - }, - - getAttrDisabled: function () { - let instance = Template.instance(); - let result = {}; - let action = instance.state.get('action'); - - if (R.contains(action, ['view', 'remove'])) { - result = R.assoc('disabled', true, result); - } - - return result; - }, - - getModelField: function (fieldName) { - let instance = Template.instance(); - return R.path([fieldName], instance.state.get('model')); - }, - - actionLabel: function () { - let instance = Template.instance(); - let action = instance.state.get('action'); - return calcActionLabel(action); - }, - - viewEnvs: function () { - let instance = Template.instance(); - return instance.state.get('viewEnvs'); - }, - - editEnvs: function () { - let instance = Template.instance(); - return instance.state.get('editEnvs'); - }, - - envs: function () { - return Environments.find({}); - }, - - getAttrSelected: function (optionValue, modelValue) { - let result = {}; - - if (optionValue === modelValue) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, - - getAttrSelectedMultiple: function (optionValue, modelValues) { - let result = {}; - - if (R.isNil(modelValues)) { return result; } - - if (R.contains(optionValue, modelValues)) { - result = R.assoc('selected', 'selected', result); - } - - return result; - }, -}); // end: helpers - - -function initInsertView(instance, query) { - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - - instance.state.set('model', - { - username: '', - password: '' - } - /*.schema.clean({ - //environment: instance.state.get('env') - }) - */ - ); - - subscribeToOptionsData(instance); - //instance.subscribe('constants'); - //instance.subscribe('link_types?env', query.env); -} - -function initViewView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - subscribeToModel(instance, reqId.id); - //instance.subscribe('constants'); - //instance.subscribe('link_types?_id', reqId.id); - -} - -function initUpdateView(instance, query) { - let reqId = parseReqId(query.id); - - instance.state.set('action', query.action); - //instance.state.set('env', query.env); - instance.state.set('id', reqId); - - subscribeToOptionsData(instance); - subscribeToModel(instance, reqId.id); - //instance.subscribe('constants'); - //instance.subscribe('link_types?_id', reqId.id); -} - -function initRemoveView(instance, query) { - initViewView(instance, query); -} - -function subscribeToOptionsData(instance) { - instance.subscribe('constants'); - instance.subscribe('environments_config'); -} - -function subscribeToModel(instance, id) { - instance.subscribe('users'); - - Meteor.users.find({ _id: id }).forEach((model) => { - instance.state.set('model', { - _id: model._id, - username: model.username, - password: '******' - }); - - instance.subscribe('environments.view-env&userId', model._id); - instance.subscribe('environments.edit-env&userId', model._id); - - let viewEnvsList = []; - Environments.find({ 'auth.view-env': { $in: [ model._id ] }}).forEach((viewEnv) => { - viewEnvsList = R.union(viewEnvsList, [ viewEnv.name ]); - instance.state.set('viewEnvs', viewEnvsList); - }); - - let editEnvsList = []; - Environments.find({ 'auth.edit-env': { $in: [ model._id ] }}).forEach((editEnv) => { - editEnvsList = R.union(editEnvsList, [ editEnv.name ]); - instance.state.set('editEnvs', editEnvsList); - }); - }); -} - -function submitItem( - instance, - id, - username, - password, - viewEnvs, - editEnvs - ){ - - let action = instance.state.get('action'); - - instance.state.set('isError', false); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', false); - instance.state.set('message', null); - - switch (action) { - case 'insert': - insert.call({ - username: username, - password: password, - viewEnvs: viewEnvs, - editEnvs: editEnvs, - }, processActionResult.bind(null, instance)); - break; - - case 'update': - update.call({ - _id: id.id, - //password: password, - viewEnvs: viewEnvs, - editEnvs: editEnvs, - }, processActionResult.bind(null, instance)); - break; - - case 'remove': - remove.call({ - _id: id.id - }, processActionResult.bind(null, instance)); - break; - - default: - // todo - break; - } -} - -function processActionResult(instance, error) { - let action = instance.state.get('action'); - - if (error) { - instance.state.set('isError', true); - instance.state.set('isSuccess', false); - instance.state.set('isMessage', true); - - if (typeof error === 'string') { - instance.state.set('message', error); - } else { - instance.state.set('message', error.message); - } - - } else { - instance.state.set('isError', false); - instance.state.set('isSuccess', true); - instance.state.set('isMessage', true); - - switch (action) { - case 'insert': - instance.state.set('message', 'Record had been added successfully'); - instance.state.set('disabled', true); - break; - - case 'remove': - instance.state.set('message', 'Record had been removed successfully'); - instance.state.set('disabled', true); - break; - - case 'update': - instance.state.set('message', 'Record had been updated successfully'); - break; - } - } -} - -function calcActionLabel(action) { - switch (action) { - case 'insert': - return 'Add'; - case 'remove': - return 'Remove'; - default: - return 'Submit'; - } -} diff --git a/ui/imports/ui/components/user/user.styl b/ui/imports/ui/components/user/user.styl deleted file mode 100644 index 434cc64..0000000 --- a/ui/imports/ui/components/user/user.styl +++ /dev/null @@ -1,34 +0,0 @@ -.os-user - margin: 20px; - - .cl-field-group - display: flex; - flex-flow: row nowrap; - align-items: center; - padding: 5px 0; - - .cl-field-label - width: 170px; - margin: 0 5px; - - .cl-input - display: block; - width: 100%; - min-height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - width: 400px; - margin: 0 5px; - - .cl-field-desc - margin: 0 5px; - - .js-message-panel - margin-top: 20px; diff --git a/ui/imports/ui/components/vedge-info-window/vedge-info-window.html b/ui/imports/ui/components/vedge-info-window/vedge-info-window.html deleted file mode 100644 index 3670d71..0000000 --- a/ui/imports/ui/components/vedge-info-window/vedge-info-window.html +++ /dev/null @@ -1,114 +0,0 @@ - - diff --git a/ui/imports/ui/components/vedge-info-window/vedge-info-window.js b/ui/imports/ui/components/vedge-info-window/vedge-info-window.js deleted file mode 100644 index a278f3a..0000000 --- a/ui/imports/ui/components/vedge-info-window/vedge-info-window.js +++ /dev/null @@ -1,380 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: VedgeInfoWindow - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -//import { VedgeFlows } from '/imports/api/vedge_flows/vedge_flows'; -import * as R from 'ramda'; -//import * as moment from 'moment'; - -import '/imports/ui/components/flow-graph/flow-graph'; -import '/imports/ui/components/time-selection-widget/time-selection-widget'; -import './vedge-info-window.html'; - -/* - * Lifecycles - */ - -Template.VedgeInfoWindow.onCreated(function() { - let instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - showMessage: false, - messageType: null, - message: null, - environment: null, - object_id: null, - flowTypes: [], - name: null, - srcMacAddresses: [], - dstMacAddresses: [], - srcIPv4Addresses: [], - dstIPv4Addresses: [], - selectedFlowType: null, - selectedSrcMacAddress: null, - selectedDstMacAddress: null, - selectedSrcIPv4Address: null, - selectedDstIPv4Address: null, - simulateGraph: false, - show: false, - yScale: 5000000, - startDateTime: null - }); - - instance.autorun(() => { - new SimpleSchema({ - environment: { type: String }, - object_id: { type: String }, - name: { type: String }, - left: { type: Number }, - top: { type: Number }, - show: { type: Boolean }, - onCloseRequested: { type: Function } - }).validate(Template.currentData()); - - instance.state.set('show', Template.currentData().show); - instance.state.set('environment', Template.currentData().environment); - instance.state.set('object_id', Template.currentData().object_id); - }); - - instance.autorun(() => { - let environment = instance.state.get('environment'); - let object_id = instance.state.get('object_id'); - let flowType = instance.state.get('selectedFlowType'); - - Meteor.call('statistics.flowTypes?env&object_id&type', { - env: environment, - object_id: object_id, - type: 'vedge_flows' - }, (err, res) => { - if (! R.isNil(err)) { - showMessage(instance, 'danger', - 'error in query for: flowTypes' + '\n' + err); - return; - } - - let flowTypes = R.pipe( - R.map(R.prop('flowType')), - R.map((name) => { return { name: name }; }) - )(res); - instance.state.set('flowTypes', flowTypes); - }); - - switch (flowType) { - case 'L2': - fetchL2Addressess( - environment, - object_id, - flowType, - instance - ); - break; - - case 'L3': - fetchL3Addressess( - environment, - object_id, - flowType, - instance - ); - break; - - - default: - break; - } - }); -}); - -Template.VedgeInfoWindow.rendered = function() { - this.$('.sm-start-datetime-group').datetimepicker({ - format: 'YYYY-MM-DD HH:mm' - }); -}; - -/* - * Events - */ - -Template.VedgeInfoWindow.events({ - 'click .sm-close-button': function (event, instance) { - event.stopPropagation(); - instance.data.onCloseRequested(); - }, - - 'change .sm-flow-type-select': function (event, instance) { - event.stopPropagation(); - event.preventDefault(); - - let selections = R.map(function (optionEl) { - return optionEl.value; - }, event.target.selectedOptions); - - instance.state.set('selectedFlowType', selections[0]); - }, - - 'change .sm-source-mac-address-select': function (event, instance) { - event.stopPropagation(); - event.preventDefault(); - - let selections = R.map(function (optionEl) { - return optionEl.value; - }, event.target.selectedOptions); - - instance.state.set('selectedSrcMacAddress', selections[0]); - }, - - 'change .sm-destination-mac-address-select': function (event, instance) { - event.stopPropagation(); - event.preventDefault(); - - let selections = R.map(function (optionEl) { - return optionEl.value; - }, event.target.selectedOptions); - - instance.state.set('selectedDstMacAddress', selections[0]); - }, - - 'click .sm-simulate-graph': function (event, instance) { - let element = instance.$('.sm-simulate-graph')[0]; - instance.state.set('simulateGraph', element.checked); - }, - - 'input .sm-y-scale-input': function (event, instance) { - let element = instance.$('.sm-y-scale-input')[0]; - let val = R.ifElse(isNaN, R.always(5000000), Number)(element.value); - instance.state.set('yScale', val); - }, - - 'dp.change .sm-start-datetime-group': function (event, instance) { - let element = instance.$('.sm-start-datetime')[0]; - //let startDateTime = moment(element.value); - instance.state.set('startDateTime', element.value); - } -}); - -/* - * Helpers - */ - -Template.VedgeInfoWindow.helpers({ - flowTypes: function () { - let instance = Template.instance(); - return instance.state.get('flowTypes'); - }, - - srcMacAddresses: function () { - let instance = Template.instance(); - return instance.state.get('srcMacAddresses'); - }, - - dstMacAddresses: function () { - let instance = Template.instance(); - return instance.state.get('dstMacAddresses'); - }, - - srcIPv4Addresses: function () { - let instance = Template.instance(); - return instance.state.get('srcIPv4Addresses'); - }, - - dstIPv4Addresses: function () { - let instance = Template.instance(); - return instance.state.get('dstIPv4Addresses'); - }, - - selectedFlowType: function () { - let instance = Template.instance(); - return instance.state.get('selectedFlowType'); - }, - - is: function (src, trg) { - return src === trg; - }, - - isShow: function () { - let instance = Template.instance(); - return instance.state.get('show'); - }, - - isShowGraph: function () { - let instance = Template.instance(); - - let show = instance.state.get('show'); - if (! show) { return false; } - - let info = { - env: instance.state.get('environment'), - object_id: instance.state.get('object_id'), - flowType: instance.state.get('selectedFlowType'), - sourceMacAddress: instance.state.get('selectedSrcMacAddress'), - destinationMacAddress: instance.state.get('selectedDstMacAddress'), - sourceIPv4Address: instance.state.get('selectedSrcIPv4Address'), - destinationIPv4Address: instance.state.get('selectedDstIPv4Address') - }; - - if (R.any(R.either(R.isNil, R.isEmpty))([info.env, info.object_id, info.flowType])) { - return false; - } - - let sourceDestVals = R.cond([ - [R.equals('L2'), R.always([info.sourceMacAddress, info.destinationMacAddress])], - [R.equals('L3'), R.always([info.sourceIPv4Address, info.destinationIPv4Address])] - ])(info.flowType); - - if (R.any(R.either(R.isNil, R.isEmpty))(sourceDestVals)) { - return false; - } - - return true; - }, - - argsFlowGraph: function () { - let instance = Template.instance(); - - return { - env: instance.state.get('environment'), - object_id: instance.state.get('object_id'), - type: 'vedge_flows', - flowType: instance.state.get('selectedFlowType'), - sourceMacAddress: instance.state.get('selectedSrcMacAddress'), - destinationMacAddress: instance.state.get('selectedDstMacAddress'), - sourceIPv4Address: instance.state.get('selectedSrcIPv4Address'), - destinationIPv4Address: instance.state.get('selectedDstIPv4Address'), - simulateGraph: instance.state.get('simulateGraph'), - yScale: instance.state.get('yScale'), - startDateTime: instance.state.get('startDateTime') - }; - }, - - showMessage: function () { - let instance = Template.instance(); - return instance.state.get('showMessage'); - }, - - message: function () { - let instance = Template.instance(); - return instance.state.get('message'); - }, - - messageType: function () { - let instance = Template.instance(); - return instance.state.get('messageType'); - }, -}); - -function showMessage(instance, type, message) { - instance.state.set('showMessage', true); - instance.state.set('messageType', type); - instance.state.set('message', message); -} - -function fetchL2Addressess( - environment, - id, - flowType, - instance) { - - Meteor.call('statistics.srcMacAddresses?env&object_id&type&flowType', { - env: environment, - object_id: id, - type: 'vedge_flows', - flowType: flowType - }, (err, res) => { - if (!R.isNil(err)) { - showMessage(instance, 'danger', 'error in query for: srcMacAddresses'); - return; - } - - let addresses = R.map((address) => { return address.sourceMacAddress; } )(res); - instance.state.set('srcMacAddresses', addresses); - }); - - Meteor.call('statistics.dstMacAddresses?env&object_id&type&flowType', { - env: environment, - object_id: id, - type: 'vedge_flows', - flowType: flowType - }, (err, res) => { - if (!R.isNil(err)) { - showMessage(instance, 'danger', - `error in query for: dstMacAddresses - message: ${err.message}` ); - return; - } - - let addresses = R.map((address) => { - return address.destinationMacAddress; - })(res); - instance.state.set('dstMacAddresses', addresses); - }); -} - -function fetchL3Addressess( - environment, - id, - flowType, - instance) { - - Meteor.call('statistics.srcIPv4Addresses?env&object_id&type&flowType', { - env: environment, - object_id: id, - type: 'vedge_flows', - flowType: flowType - }, (err, res) => { - if (!R.isNil(err)) { - showMessage(instance, 'danger', 'error in query for: src ip addresses'); - return; - } - - let addresses = R.map((address) => { return address.sourceIPv4Address; } )(res); - instance.state.set('srcIPv4Addresses', addresses); - }); - - Meteor.call('statistics.dstIPv4Addresses?env&object_id&type&flowType', { - env: environment, - object_id: id, - type: 'vedge_flows', - flowType: flowType - }, (err, res) => { - if (!R.isNil(err)) { - showMessage(instance, 'danger', 'error in query for: dst ip addresses'); - return; - } - - let addresses = R.map((address) => { return address.destinationIPv4Address; } )(res); - instance.state.set('dstIPv4Addresses', addresses); - }); -} diff --git a/ui/imports/ui/components/vedge-info-window/vedge-info-window.styl b/ui/imports/ui/components/vedge-info-window/vedge-info-window.styl deleted file mode 100644 index 6a5bda1..0000000 --- a/ui/imports/ui/components/vedge-info-window/vedge-info-window.styl +++ /dev/null @@ -1,43 +0,0 @@ -/* Set the component style here */ -.os-vedge-info-window - visibility: hidden; - opacity: 0 - - position: absolute; - padding: 20px; - width: 0; - height: 0; - - text-align: left; - font: normal 18px sans-serif; - color white - background: dk-gray1; - - border: 2px solid stark-blue - - transition: opacity 0.5s linear - - .cl-input - color: dk-gray1 - padding: 7px 5px; - - .sm-body - margin: 20px 0; - - .sm-form-group - display: flex; - flex-flow: column nowrap; - -.os-vedge-info-window.cl-visible - visibility: visible - min-width: 500px; - min-height: 400px; - z-index: 3; - opacity: 0.9 - transition: visibility 0s, opacity 0.2s linear - width: initial; - height: initial; - - .sm-start-datetime-group - width: 500px; - color: dk-gray1; diff --git a/ui/imports/ui/components/zone-dashboard/zone-dashboard.html b/ui/imports/ui/components/zone-dashboard/zone-dashboard.html deleted file mode 100644 index 9b80945..0000000 --- a/ui/imports/ui/components/zone-dashboard/zone-dashboard.html +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/ui/imports/ui/components/zone-dashboard/zone-dashboard.js b/ui/imports/ui/components/zone-dashboard/zone-dashboard.js deleted file mode 100644 index 7ad01e7..0000000 --- a/ui/imports/ui/components/zone-dashboard/zone-dashboard.js +++ /dev/null @@ -1,214 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* - * Template Component: ZoneDashboard - */ - -//import { Meteor } from 'meteor/meteor'; -import { Template } from 'meteor/templating'; -import { ReactiveDict } from 'meteor/reactive-dict'; -import { Inventory } from '/imports/api/inventories/inventories'; -import { SimpleSchema } from 'meteor/aldeed:simple-schema'; -import { regexEscape } from '/imports/lib/regex-utils'; -import * as R from 'ramda'; -import { store } from '/imports/ui/store/store'; -import { Icon } from '/imports/lib/icon'; - -//import '/imports/ui/components/accordionNavMenu/accordionNavMenu'; -import '/imports/ui/components/data-cubic/data-cubic'; -import '/imports/ui/components/list-info-box/list-info-box'; - -import './zone-dashboard.html'; -let infoBoxes = [{ - header: ['components', 'zoneDashboard', 'infoBoxes', 'instances', 'header'], - dataSource: 'instancesCount', - icon: { type: 'fa', name: 'desktop' }, - theme: 'dark' -}, { - header: ['components', 'zoneDashboard', 'infoBoxes', 'vServices', 'header'], - dataSource: 'vServicesCount', - icon: { type: 'fa', name: 'object-group' }, - theme: 'dark' -}, { - header: ['components', 'zoneDashboard', 'infoBoxes', 'hosts', 'header'], - dataSource: 'hostsCount', - icon: { type: 'fa', name: 'server' }, - theme: 'dark' -}, { - header: ['components', 'zoneDashboard', 'infoBoxes', 'vConnectors', 'header'], - dataSource: 'vConnectorsCount', - icon: { type: 'fa', name: 'compress' }, - theme: 'dark' -}, { - header: ['components', 'zoneDashboard', 'infoBoxes', 'vEdges', 'header'], - dataSource: 'vEdgesCount', - icon: { type: 'fa', name: 'external-link' }, - theme: 'dark' -}]; - -let listInfoBoxes = [{ - header: ['components', 'zoneDashboard', 'listInfoBoxes', 'hosts', 'header'], - listName: 'hosts', - listItemFormat: { - getLabelFn: (item) => { return item.name; }, - getValueFn: (item) => { return item._id._str; }, - }, - icon: { type: 'material', name: 'developer_board' }, -}]; - -/* - * Lifecycles - */ - -Template.ZoneDashboard.onCreated(function() { - var instance = this; - - instance.state = new ReactiveDict(); - instance.state.setDefault({ - _id: null, - id_path: null, - instancesCount: 0, - vServicesCount: 0, - hostsCount: 0, - vConnectors: 0, - vEdges: 0, - }); - - instance.autorun(function () { - let data = Template.currentData(); - - new SimpleSchema({ - _id: { type: { _str: { type: String, regEx: SimpleSchema.RegEx.Id } } }, - onNodeSelected: { type: Function }, - }).validate(data); - - instance.state.set('_id', data._id); - }); - - instance.autorun(function () { - let _id = instance.state.get('_id'); - - instance.subscribe('inventory?_id', _id); - Inventory.find({ _id: _id }).forEach((zone) => { - instance.state.set('id_path', zone.id_path); - - instance.subscribe('inventory?id_path', zone.id_path); - instance.subscribe('inventory?id_path_start&type', zone.id_path, 'instance'); - instance.subscribe('inventory?id_path_start&type', zone.id_path, 'vservice'); - instance.subscribe('inventory?id_path_start&type', zone.id_path, 'host'); - instance.subscribe('inventory?id_path_start&type', zone.id_path, 'vconnector'); - instance.subscribe('inventory?id_path_start&type', zone.id_path, 'vedge'); - - let idPathExp = new RegExp(`^${regexEscape(zone.id_path)}`); - - instance.state.set('instancesCount', Inventory.find({ - id_path: idPathExp, - type: 'instance' - }).count()); - - instance.state.set('vServicesCount', Inventory.find({ - id_path: idPathExp, - type: 'vservice' - }).count()); - - instance.state.set('hostsCount', Inventory.find({ - id_path: idPathExp, - type: 'host' - }).count()); - - instance.state.set('vConnectorsCount', Inventory.find({ - id_path: idPathExp, - type: 'vconnector' - }).count()); - - instance.state.set('vEdgesCount', Inventory.find({ - id_path: idPathExp, - type: 'vedge' - }).count()); - }); - }); -}); - -/* -Template.ZoneDashboard.rendered = function() { -}; -*/ - -/* - * Events - */ - -Template.ZoneDashboard.events({ -}); - -/* - * Helpers - */ - -Template.ZoneDashboard.helpers({ - zone: function () { - let instance = Template.instance(); - let _id = instance.state.get('_id'); - - return Inventory.findOne({ _id: _id }); - }, - - infoBoxes: function () { - return infoBoxes; - }, - - listInfoBoxes: function () { - return listInfoBoxes; - }, - - argsInfoBox: function (infoBox) { - let instance = Template.instance(); - - return { - header: R.path(infoBox.header, store.getState().api.i18n), - dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(infoBox.icon), - theme: infoBox.theme - }; - }, - - argsListInfoBox: function (listInfoBox) { - let instance = Template.instance(); - let data = Template.currentData(); - let zone_id_path = instance.state.get('id_path'); - - return { - header: R.path(listInfoBox.header, store.getState().api.i18n), - list: getList(listInfoBox.listName, zone_id_path), - //dataInfo: instance.state.get(infoBox.dataSource).toString(), - icon: new Icon(listInfoBox.icon), - //theme: infoBox.theme - listItemFormat: listInfoBox.listItemFormat, - onItemSelected: function (itemKey) { - data.onNodeSelected(new Mongo.ObjectID(itemKey)); - } - }; - } -}); - - -function getList(listName, parentIdPath) { - let idPathExp = new RegExp(`^${regexEscape(parentIdPath)}`); - - switch (listName) { - case 'hosts': - return Inventory.find({ - id_path: idPathExp, - type: 'host' - }); - - default: - throw 'unknowned list type'; - } -} diff --git a/ui/imports/ui/components/zone-dashboard/zone-dashboard.styl b/ui/imports/ui/components/zone-dashboard/zone-dashboard.styl deleted file mode 100644 index 6910abb..0000000 --- a/ui/imports/ui/components/zone-dashboard/zone-dashboard.styl +++ /dev/null @@ -1,10 +0,0 @@ -.os-zone-dashboard - .sm-info-boxes - display: flex - flex-flow: row wrap; - justify-content: space-around - - .sm-list-info-boxes - display: flex; - flex-flow: row wrap - justify-content: space-around diff --git a/ui/imports/ui/index.styl b/ui/imports/ui/index.styl deleted file mode 100644 index 281bbf0..0000000 --- a/ui/imports/ui/index.styl +++ /dev/null @@ -1 +0,0 @@ -@import 'components/*' diff --git a/ui/imports/ui/lib/environment-tree-node-behavior.js b/ui/imports/ui/lib/environment-tree-node-behavior.js deleted file mode 100644 index 12f0407..0000000 --- a/ui/imports/ui/lib/environment-tree-node-behavior.js +++ /dev/null @@ -1,38 +0,0 @@ -import { Inventory } from '/imports/api/inventories/inventories'; - -export let EnvironmentTreeNodeBehavior = { - subscribeGetChildrenFn: function (instance, env) { - instance.subscribe('inventory.children', - env.name, env.type, null, env.name); - }, - - subscribeGetFirstChildFn: function (instance, env) { - instance.subscribe('inventory.first-child', - env.name, env.type, null, env.name); - }, - - getChildrenFn: function (env) { - let query = { - $or: [{ - parent_id: env.name, - parent_type: env.type, - environment: env.name, - show_in_tree: true - }] - }; - - return Inventory.find(query); - }, - - hasChildrenFn: function (env) { - let query = { - $or: [ - { - parent_id: env.name - } - ] - }; - - return Inventory.find(query).count() > 0; - } -}; diff --git a/ui/imports/ui/lib/input-model.js b/ui/imports/ui/lib/input-model.js deleted file mode 100644 index a60f842..0000000 --- a/ui/imports/ui/lib/input-model.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * file: input-model.js - */ - -import * as R from 'ramda'; - -export const createInputArgs = function (params) { - let instance = Template.instance(); - - return { - value: params.hash.value, - type: params.hash.type, - placeholder: params.hash.placeholder, - disabled: params.hash.disabled, - setModel: function (value) { - let mainModel = instance.data.model; - let newMainModel = R.assoc(params.hash.key, value, mainModel); - if (instance.data.setModel) { - instance.data.setModel(newMainModel); - } - }, - }; -}; diff --git a/ui/imports/ui/lib/inventory-tree-node-behavior.js b/ui/imports/ui/lib/inventory-tree-node-behavior.js deleted file mode 100644 index c8bf4fd..0000000 --- a/ui/imports/ui/lib/inventory-tree-node-behavior.js +++ /dev/null @@ -1,58 +0,0 @@ -import { Inventory } from '/imports/api/inventories/inventories'; -//import * as R from 'ramda'; - -export let InventoryTreeNodeBehavior = { - subscribeGetChildrenFn: function (instance, parent) { - instance.subscribe('inventory.children', - parent.id, parent.type, parent.name, parent.environment); - }, - - subscribeGetFirstChildFn: function (instance, parent) { - instance.subscribe('inventory.first-child', - parent.id, parent.type, parent.name, parent.environment); - }, - - getChildrenFn: function (parent) { - let query = { - $or: [{ - parent_id: parent.id, - parent_type: parent.type, - environment: parent.environment, - show_in_tree: true - }] - }; - - /* - if (R.equals('host_ref', parent.type)) { - let realParent = Inventory.findOne({ - name: parent.name, - environment: parent.environment, - type: 'host' - }); - - if (! R.isNil(realParent)) { - query = R.merge(query, { - $or: R.append({ - environment: parent.environment, - parent_id: realParent.id - }, query.$or) - }); - } - } - */ - - return Inventory.find(query); - }, - - hasChildrenFn: function (parent) { - let query = { - $or: [ - { - parent_id: parent._id - } - ] - }; - - return Inventory.find(query).count() > 0; - } -}; diff --git a/ui/imports/ui/lib/select-model.js b/ui/imports/ui/lib/select-model.js deleted file mode 100644 index c902f93..0000000 --- a/ui/imports/ui/lib/select-model.js +++ /dev/null @@ -1,23 +0,0 @@ -import * as R from 'ramda'; - -export const createSelectArgs = function (params) { - let instance = Template.instance(); - - return { - values: params.hash.values, - type: params.hash.type, - placeholder: params.hash.placeholder, - options: params.hash.options, - multi: params.hash.multi ? params.hash.multi : false, - disabled: params.hash.disabled, - setModel: params.hash.setModel ? params.hash.setModel.fn : - function (values) { - let model = instance.data.model; - let newModel = R.assoc(params.hash.key, values, model); - if (instance.data.setModel) { - instance.data.setModel(newModel); - } - }, - showNullOption: R.isNil(params.hash.showNullOption) ? false : params.hash.showNullOption - }; -}; diff --git a/ui/imports/ui/reducers/environment-panel.reducer.js b/ui/imports/ui/reducers/environment-panel.reducer.js deleted file mode 100644 index d06052f..0000000 --- a/ui/imports/ui/reducers/environment-panel.reducer.js +++ /dev/null @@ -1,186 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/environment-panel.actions'; -import { reducer as treeNode } from './tree-node.reducer'; -import { - updateTreeNodeInfo, - addUpdateChildrenTreeNode, - resetTreeNodeChildren, - startOpenTreeNode, - endOpenTreeNode, - startCloseTreeNode, - endCloseTreeNode, - setChildDetectedTreeNode, - setPositionReportIsNeededAsOn, - reportNodePositionRetrieved, - setScrollToNodeIsNeededAsOn, - reportScrollToNodePerformed, - resetNeedChildDetection, -} - from '/imports/ui/actions/tree-node.actions'; - -const defaultState = { - _id: null, - envName: null, - isLoaded: false, - treeNode: treeNode(), - selectedNode: { - _id: null, - type: null - }, - showType: 'dashboard' -}; - -let newState; - -export function reducer(state = defaultState, action) { - switch (action.type) { - case actions.SET_ENV_NAME: - return R.assoc('envName', action.payload.envName, state); - - case actions.UPDATE_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, - updateTreeNodeInfo(action.payload.nodeInfo, 0)), - state); - - case actions.ADD_UPDATE_CHILDREN_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, - addUpdateChildrenTreeNode(action.payload.nodePath, action.payload.childrenInfo, 0)), - state); - - case actions.RESET_ENV_TREE_NODE_CHILDREN: - return R.assoc('treeNode', - treeNode(state.treeNode, resetTreeNodeChildren(action.payload.nodePath)), - state - ); - - case actions.START_OPEN_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, startOpenTreeNode(action.payload.nodePath)), - state - ); - - case actions.END_OPEN_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, endOpenTreeNode(action.payload.nodePath)), - state - ); - - case actions.START_CLOSE_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, startCloseTreeNode(action.payload.nodePath)), - state - ); - - case actions.END_CLOSE_ENV_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, endCloseTreeNode(action.payload.nodePath)), - state - ); - - case actions.SET_ENV_CHILD_DETECTED_TREE_NODE: - return R.assoc('treeNode', - treeNode(state.treeNode, setChildDetectedTreeNode(action.payload.nodePath)), - state - ); - - case actions.SET_ENV_SELECTED_NODE: - if (R.pathEq(['selectedNode', '_id'], action.payload.nodeId, state) && - R.pathEq(['selectedNode', 'type'], action.payload.nodeType) - ) { - return state; - } - - return R.merge(state, { - selectedNode: { - _id: action.payload.nodeId, - type: action.payload.nodeType - } - }); - - case actions.SET_ENV_SELECTED_NODE_INFO: - newState = R.merge(state, { - selectedNode: R.merge(state.selectedNode, { - type: action.payload.nodeInfo.type, - clique: action.payload.nodeInfo.clique, - id_path: action.payload.nodeInfo.id_path - }) - }); - - if (! R.isNil(action.payload.nodeInfo.clique)) { - newState = R.assoc('showType', 'graph', newState); - } - - return newState; - - case actions.SET_ENV_SELECTED_NODE_AS_ENV: - return R.merge(state, { - selectedNode: { - _id: state._id, - type: 'environment' - } - }); - - case actions.SET_ENV_ENV_ID: - return R.assoc('_id', action.payload._id, state); - - case actions.SET_ENV_AS_LOADED: - return R.assoc('isLoaded', true, state); - - case actions.SET_ENV_AS_NOT_LOADED: - return R.assoc('isLoaded', false, state); - - case actions.SET_SHOW_DASHBOARD: - return R.assoc('showType', 'dashboard', state); - - case actions.SET_SHOW_GRAPH: - return R.assoc('showType', 'graph', state); - - case actions.TOGGLE_ENV_SHOW: - return R.pipe( - R.ifElse(R.equals('dashboard'), - R.always('graph'), - R.always('dashboard')), - R.assoc('showType', R.__, state) - )(state.showType); - - case actions.SET_ENV_POSITION_REPORT_IS_NEEDED_AS_ON: - return R.assoc('treeNode', - treeNode(state.treeNode, setPositionReportIsNeededAsOn(action.payload.nodePath)), - state - ); - - case actions.REPORT_ENV_NODE_POSITION_RETRIEVED: - return R.assoc('treeNode', - treeNode(state.treeNode, reportNodePositionRetrieved( - action.payload.nodePath, action.payload.rect)), - state - ); - - case actions.SET_ENV_SCROLL_TO_NODE_IS_NEEDED_AS_ON: - return R.assoc('treeNode', - treeNode(state.treeNode, setScrollToNodeIsNeededAsOn( - action.payload.nodePath)), - state - ); - - case actions.REPORT_ENV_SCROLL_TO_NODE_PERFORMED: - return R.assoc('treeNode', - treeNode(state.treeNode, reportScrollToNodePerformed( - action.payload.nodePath)), - state - ); - - case actions.RESET_ENV_NEED_CHILD_DETECTION: - return R.assoc('treeNode', - treeNode(state.treeNode, resetNeedChildDetection( - action.payload.nodePath)), - state - ); - - default: - return state; - } -} diff --git a/ui/imports/ui/reducers/graph-tooltip-window.reducer.js b/ui/imports/ui/reducers/graph-tooltip-window.reducer.js deleted file mode 100644 index 4489fb6..0000000 --- a/ui/imports/ui/reducers/graph-tooltip-window.reducer.js +++ /dev/null @@ -1,40 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/graph-tooltip-window.actions'; - -const defaultState = { - label: '', - title: '', - left: 0, - top: 0, - show: false -}; - -export function reducer(state = defaultState, action) { - let attrsStr; - switch (action.type) { - case actions.ACTIVATE_GRAPH_TOOLTIP_WINDOW: - attrsStr = JSON.stringify(action.payload.attributes, null, 4) - .toString() - .replace(/\,/g,'
') - .replace(/\[/g,'') - .replace(/\]/g,'') - .replace(/\{/g,'') - .replace(/\}/g,'') - .replace(/"/g,''); - - return R.merge(state, { - label: action.payload.label, - title: attrsStr, - left: action.payload.left, - top: action.payload.top - 28, - show: true - }); - - case actions.CLOSE_GRAPH_TOOLTIP_WINDOW: - return R.assoc('show', false, state); - - default: - return state; - } -} diff --git a/ui/imports/ui/reducers/i18n.reducer.js b/ui/imports/ui/reducers/i18n.reducer.js deleted file mode 100644 index 28815f7..0000000 --- a/ui/imports/ui/reducers/i18n.reducer.js +++ /dev/null @@ -1,172 +0,0 @@ -//import * as R from 'ramda'; - -const defaultState = { - apis: { - - }, - collections: { - environments: { - fields: { - eventBasedScan: { - header: 'Event based scan', - desc: 'Update the inventory in real-time whenever a user makes a change to the OpenStack environment' - } - } - } - }, - components: { - environment: { - noGraphForLeafMsg: 'No clique for this focal_point', - briefInfos: { - lastScanning: { - header: 'Last scanning' - }, - vConnectorsNum: { - header: 'Number of vConnectors' - }, - hostsNum: { - header: 'Number of hosts' - }, - vServicesNum: { - header: 'Number of vServices' - }, - instancesNum: { - header: 'Number of instances' - } - }, - listInfoBoxes: { - regions: { - header: 'Regions' - }, - projects: { - header: 'Projects' - } - } - }, - projectDashboard: { - infoBoxes: { - networks: { - header: 'Number of networks' - }, - ports: { - header: 'Number of ports' - } - } - }, - - regionDashboard: { - infoBoxes: { - instances: { - header: 'Number of instances' - }, - vServices: { - header: 'Number of vServices' - }, - hosts: { - header: 'Number of hosts' - }, - vConnectors: { - header: 'Number of vConnectors' - } - }, - listInfoBoxes: { - availabilityZones: { - header: 'Availability zones' - }, - aggregates: { - header: 'Aggregates' - } - } - }, - - zoneDashboard: { - infoBoxes: { - instances: { - header: 'Number of instances' - }, - vServices: { - header: 'Number of vServices' - }, - hosts: { - header: 'Number of hosts' - }, - vConnectors: { - header: 'Number of vConnectors' - }, - vEdges: { - header: 'Number of vEdges' - } - }, - listInfoBoxes: { - hosts: { - header: 'Hosts' - }, - } - }, - - aggregateDashboard: { - infoBoxes: { - instances: { - header: 'Number of instances' - }, - vServices: { - header: 'Number of vServices' - }, - hosts: { - header: 'Number of hosts' - }, - vConnectors: { - header: 'Number of vConnectors' - }, - vEdges: { - header: 'Number of vEdges' - } - }, - listInfoBoxes: { - hosts: { - header: 'Hosts' - }, - } - }, - - hostDashboard: { - infoBoxes: { - instances: { - header: 'Number of instances' - }, - vServices: { - header: 'Number of vServices' - }, - vConnectors: { - header: 'Number of vConnectors' - }, - networkAgents: { - header: 'Number of agents' - }, - pnics: { - header: 'Number of pnics' - }, - vEdges: { - header: 'Number of vEdges' - }, - ports: { - header: 'Number of ports' - } - }, - }, - - generalFolderNodeDashboard: { - mainCubic: { - header: 'Number of children' - } - } - } -}; - -export function reducer(state = defaultState, action) { - switch (action.type) { - - default: - return state; - } -} diff --git a/ui/imports/ui/reducers/index.js b/ui/imports/ui/reducers/index.js deleted file mode 100644 index 936f68a..0000000 --- a/ui/imports/ui/reducers/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import { combineReducers } from 'redux'; - -import { navigation } from './navigation'; -import { searchInterestedParties } from './search-interested-parties'; -import { reducer as environmentPanel } from './environment-panel.reducer'; -import { reducer as i18n } from './i18n.reducer'; -import { reducer as graphTooltipWindow } from './graph-tooltip-window.reducer'; -import { reducer as vedgeInfoWindow } from './vedge-info-window.reducer'; -import { reducer as mainApp } from './main-app.reducer'; - -const calipsoApp = combineReducers({ - api: combineReducers({ - navigation, - searchInterestedParties, - i18n - }), - components: combineReducers({ - mainApp: mainApp, - environmentPanel, - graphTooltipWindow, - vedgeInfoWindow - }) -}); - -export default calipsoApp; diff --git a/ui/imports/ui/reducers/main-app.reducer.js b/ui/imports/ui/reducers/main-app.reducer.js deleted file mode 100644 index e5e1489..0000000 --- a/ui/imports/ui/reducers/main-app.reducer.js +++ /dev/null @@ -1,20 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/main-app.actions'; - -const defaultState = { - selectedEnvironment: {}, -}; - -export function reducer(state = defaultState, action) { - switch (action.type) { - case actions.SET_MAIN_APP_SELECTED_ENVIRONMENT: - return R.assoc('selectedEnvironment', { - _id: action.payload._id, - name: action.payload.name - }, state); - - default: - return state; - } -} diff --git a/ui/imports/ui/reducers/navigation.js b/ui/imports/ui/reducers/navigation.js deleted file mode 100644 index d7ab503..0000000 --- a/ui/imports/ui/reducers/navigation.js +++ /dev/null @@ -1,91 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/navigation'; - -const defaultState = { current: [], lastActionable: [] }; - -function reducer(state = defaultState, action) { - let lastActionable = null; - - switch (action.type) { - case actions.SET_CURRENT_NODE: - lastActionable = isActionable(action.payload.nodeChain) ? action.payload.nodeChain : - state.lastActionable; - - return R.merge(state, { - current: action.payload.nodeChain, - lastActionable: lastActionable - }); - - case actions.SET_CURRENT_NODE_FROM_TREE_CONTROL: - lastActionable = isActionable(action.payload.nodeChain) ? action.payload.nodeChain : - state.lastActionable; - - if (contains(action.payload.nodeChain, state.current)) { - let equalLastIndex = findEqualLastIndex(action.payload.nodeChain, state.current); - return R.merge(state, { - current: R.slice(0, equalLastIndex, action.payload.nodeChain), - lastActionable: lastActionable - }); - } else { - return R.merge(state, { - current: action.payload.nodeChain, - lastActionable: lastActionable - }); - } - - default: - return state; - } -} - -function contains(subArray, array) { - let equalLastIndex = findEqualLastIndex(subArray, array); - - if (subArray.length <= array.length && - equalLastIndex >= 0 && - subArray.length === equalLastIndex + 1) { - - return true; - } - - return false; -} - -function findEqualLastIndex (arrayA, arrayB) { - let indexResult = -1; - - for (let i = 0; (i < arrayA.length) && (i < arrayB.length); i++) { - if (equalsNodes(arrayA[i], arrayB[i])) { - indexResult = i; - } else { - break; - } - } - - return indexResult; -} - -function equalsNodes(nodeA, nodeB) { - if (nodeA.fullIdPath !== nodeB.fullIdPath) { return false; } - if (nodeA.fullNamePath !== nodeB.fullNamePath) { return false; } - - return true; -} - -function isActionable(nodeChain) { - let last = R.last(nodeChain); - - if (R.isNil(last)) { return false; } - if (R.isNil(last.item)) { return false; } - - if (! R.isNil(last.item.clique)) { return true; } - - if (last.item.id === 'aggregate-WebEx-RTP-SSD-Aggregate-node-24') { - return true; - } - - return false; -} - -export const navigation = reducer; diff --git a/ui/imports/ui/reducers/search-interested-parties.js b/ui/imports/ui/reducers/search-interested-parties.js deleted file mode 100644 index f4963d2..0000000 --- a/ui/imports/ui/reducers/search-interested-parties.js +++ /dev/null @@ -1,68 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/search-interested-parties'; - -const defaultState = { - listeners: [], - searchTerm: null, - searchAutoCompleteTerm: null, - searchAutoCompleteFutureId: null -}; - -function reducer(state = defaultState, action) { - let newListeners; - - switch (action.type) { - case actions.ADD_SEARCH_INTERESTED_PARTY: - newListeners = R.unionWith( - R.eqBy(R.prop('action')), - state.listeners, - [{ action: action.payload.listener }]); - return R.assoc('listeners', newListeners, state); - - case actions.REMOVE_SEARCH_INTERESTED_PARTY: - newListeners = R.differenceWith( - R.eqBy(R.prop('action')), - state.listeners, - [{ action:action.payload.listener }]); - return R.assoc('listeners', newListeners, state); - - case actions.SET_SEARCH_TERM: - asyncCall(() => { - notifyListeners(action.payload.searchTerm, state.listeners); - }); - return R.assoc('searchTerm', action.payload.searchTerm, state); - - case actions.SET_SEARCH_AUTO_COMPLETE_TERM: - return R.assoc('searchAutoCompleteTerm', action.payload.searchTerm, state); - - case actions.RESET_SEARCH_AUTO_COMPLETE_FUTURE: - if (! R.isNil(state.searchAutoCompleteFutureId)) { - clearTimeout(state.searchAutoCompleteFutureId); - } - return R.assoc('searchAutoCompleteFutureId', null, state); - - case actions.SET_SEARCH_AUTO_COMPLETE_FUTURE: - if (! R.isNil(state.searchAutoCompleteFutureId)) { - clearTimeout(state.searchAutoCompleteFutureId); - } - return R.assoc('searchAutoCompleteFutureId', action.payload.futureId, state); - - default: - return state; - } -} - -function asyncCall(fnObject) { - setTimeout(() => { - fnObject.call(null); - }, 0); -} - -function notifyListeners(searchTerm, listeners) { - R.forEach((listenerItem) => { - listenerItem.action.call(null, searchTerm); - }, listeners); -} - -export const searchInterestedParties = reducer; diff --git a/ui/imports/ui/reducers/tree-node.reducer.js b/ui/imports/ui/reducers/tree-node.reducer.js deleted file mode 100644 index 5e9420d..0000000 --- a/ui/imports/ui/reducers/tree-node.reducer.js +++ /dev/null @@ -1,224 +0,0 @@ -//import { Mongo } from 'meteor/mongo'; -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/tree-node.actions'; - -const defaultState = { - _id: null, - nodeInfo: {}, - openState: 'closed', // opened, start_close, closed, start_open - children: [], - childDetected: false, - needChildDetection: true, - linkDetected: false, - level: 1, - positionNeeded: false, - position: null, - scrollToNodeIsNeeded: false -}; - -export function reducer(state = defaultState, action) { - let nodeId; - let rest; - //let child; - //let index; - - if (R.isNil(action)) { return defaultState; } - - switch (action.type) { - - case actions.UPDATE_TREE_NODE_INFO: - return R.merge(state, { - _id: action.payload.nodeInfo._id._str, - nodeInfo: action.payload.nodeInfo, - openState: 'closed', - children: [], - childDetected: false, - needChildDetection: true, - linkDetected: R.propEq('type', 'host_ref', action.payload.nodeInfo), - level: action.payload.level, - }); - - case actions.ADD_UPDATE_CHILDREN_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - let actionChildren = R.map((childInfo) => { - let existingChild = R.find( - R.pathEq(['nodeInfo', '_id', '_str'], childInfo._id._str), state.children); - - return reducer(existingChild, - actions.updateTreeNodeInfo(childInfo, action.payload.level + 1)); - }, action.payload.childrenInfo); - - let allChildren = R.unionWith(R.eqBy(R.path(['nodeInfo', '_id', '_str'])), - actionChildren, state.children); - - /* - R.forEach((actionChild) => { - let index = R.findIndex(R.pathEq(['nodeInfo', '_id', '_str'], actionChild._id._str),state.children); - if (index < 0) { - state.children.push(actionChild); - } else { - state.children[index] = actionChild; - } - }, actionChildren); - let allChildren = state.children; - */ - - return R.merge(state, { - children: allChildren, - childDetected: R.length(allChildren) > 0 - }); - - /* - state.childDetected = R.length(allChildren) > 0; - return state; - */ - } - - return reduceActionOnChild(state, - actions.addUpdateChildrenTreeNode( - rest, action.payload.childrenInfo, action.payload.level + 1), - nodeId); - - case actions.RESET_TREE_NODE_CHILDREN: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.merge(state, { - children: [], - childDetected: false, - needChildDetection: true, - }); - } - - return reduceActionOnChild(state, actions.resetTreeNodeChildren(rest), nodeId); - - case actions.START_OPEN_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('openState', 'start_open', state); - } - - return reduceActionOnChild(state, actions.startOpenTreeNode(rest), nodeId); - - case actions.END_OPEN_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('openState', 'opened', state); - } - - return reduceActionOnChild(state, actions.endOpenTreeNode(rest), nodeId); - - case actions.START_CLOSE_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('openState', 'start_close', state); - } - - return reduceActionOnChild(state, actions.startCloseTreeNode(rest), nodeId); - - case actions.END_CLOSE_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('openState', 'closed', state); - } - - return reduceActionOnChild(state, actions.endCloseTreeNode(rest), nodeId); - - case actions.SET_CHILD_DETECTED_TREE_NODE: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('childDetected', true, state); - } - - return reduceActionOnChild(state, actions.setChildDetectedTreeNode(rest), nodeId); - - case actions.SET_POSITION_REPORT_IS_NEEDED_AS_ON: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('positionNeeded', true, state); - } - - return reduceActionOnChild(state, actions.setPositionReportIsNeededAsOn(rest), nodeId); - - case actions.REPORT_NODE_POSITION_RETRIEVED: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.merge(state, { - position: { - top: action.payload.rect.top, - bottom: action.payload.rect.bottom, - height: action.payload.rect.height, - }, - positionNeeded: false - }); - } - - return reduceActionOnChild(state, - actions.reportNodePositionRetrieved(rest, action.payload.rect), nodeId); - - case actions.SET_SCROLL_TO_NODE_IS_NEEDED_AS_ON: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('scrollToNodeIsNeeded', true, state); - } - - return reduceActionOnChild(state, actions.setScrollToNodeIsNeededAsOn(rest), nodeId); - - case actions.REPORT_SCROLL_TO_NODE_PERFORMED: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('scrollToNodeIsNeeded', false, state); - } - - return reduceActionOnChild(state, actions.reportScrollToNodePerformed(rest), nodeId); - - case actions.RESET_NEED_CHILD_DETECTION: - nodeId = R.head(action.payload.nodePath); - rest = R.tail(action.payload.nodePath); - - if (R.isNil(nodeId)) { - return R.assoc('needChildDetection', false, state); - } - - return reduceActionOnChild(state, actions.resetNeedChildDetection(rest), nodeId); - - - default: - return state; - } -} - -function reduceActionOnChild(state, action, nodeId) { - let index = R.findIndex(R.pathEq(['nodeInfo', '_id', '_str'], nodeId), state.children); - if (index < 0) throw 'error in reduce action on child'; - let child = state.children[index]; - - return R.assoc('children', - R.update(index, - reducer(child, action), - state.children), - state); -} diff --git a/ui/imports/ui/reducers/vedge-info-window.reducer.js b/ui/imports/ui/reducers/vedge-info-window.reducer.js deleted file mode 100644 index 0cedc6a..0000000 --- a/ui/imports/ui/reducers/vedge-info-window.reducer.js +++ /dev/null @@ -1,42 +0,0 @@ -import * as R from 'ramda'; - -import * as actions from '/imports/ui/actions/vedge-info-window.actions'; - -const defaultState = { - node: null, - left: 0, - top: 0, - show: false -}; - -export function reducer(state = defaultState, action) { - let newState; - - switch (action.type) { - case actions.ACTIVATE_VEDGE_INFO_WINDOW: - newState = R.merge(state, { - node: R.pick([ - '_id', - 'id', - 'id_path', - 'name', - 'name_path', - 'environment' - ], action.payload.node), - left: action.payload.left, - top: action.payload.top - 28, - show: true - }); - return newState; - - case actions.CLOSE_VEDGE_INFO_WINDOW: - return R.merge(state, { - show: false, - top: 0, - left: 0 - }); - - default: - return state; - } -} diff --git a/ui/imports/ui/store/index.js b/ui/imports/ui/store/index.js deleted file mode 100644 index af0813b..0000000 --- a/ui/imports/ui/store/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import { Store } from './store'; - -export { Store }; diff --git a/ui/imports/ui/store/store.js b/ui/imports/ui/store/store.js deleted file mode 100644 index acefce2..0000000 --- a/ui/imports/ui/store/store.js +++ /dev/null @@ -1,17 +0,0 @@ -import { createStore, applyMiddleware, compose } from 'redux'; -import thunk from 'redux-thunk'; -import calipsoApp from '/imports/ui/reducers/index'; - -const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; -const store = createStore( - calipsoApp, - composeEnhancers( - applyMiddleware( - thunk - ) - ) -); - -export { - store -}; diff --git a/ui/lib/router.js b/ui/lib/router.js deleted file mode 100644 index 4e96f9d..0000000 --- a/ui/lib/router.js +++ /dev/null @@ -1,372 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -/* Created by oashery on 3/2/2016. Modified by sisakov on 9/7/2016*/ -import * as R from 'ramda'; -import { Environments } from '/imports/api/environments/environments'; -import { parseReqId } from '/imports/lib/utilities'; - -/* - * - */ - -if (Meteor.isClient){ - Accounts.onLogin(function () { - Router.go('/Dashboard'); - }); - - Accounts.onLogout(function () { - Router.go('/'); - }); -} - -Router.configure({ - layoutTemplate: 'main', - loadingTemplate: 'loading' -}); - -if (Meteor.isClient) { - let originalDispatch = Router.dispatch; - - Router.dispatch = function (_href, _a, _onDispatchComplete) { - let that = this; - let args = arguments; - let controller = that.current(); - if (controller) { - let isDirty = Session.get('isDirty'); - let needsConfirmation = controller.state.get('needsConfirmation'); - - if (needsConfirmation && isDirty) { - let confirmResult = confirm('Changes are not saved. Are you sure you want to leave?'); - if (confirmResult) { - Session.set('isDirty', false); - } else { - let loc = Iron.Location.get(); - loc.cancelUrlChange(); - return; - } - } - } - - originalDispatch.apply(that, args); - }; -} - -function confirm(msg) { - return window.confirm(msg); -} -/* - * Hooks - */ - -Router.onBeforeAction(function () { - if (Meteor.userId()) { - this.next(); - } else { - this.layout('landing'); - this.render('landing'); - } -}); - -/* - * Routes - */ - -Router.route('/', { - name: 'landing', - path: '/', - action: function () { - if (Meteor.userId()) { - Router.go('/Dashboard'); - } - if (this.ready()) - this.layout('landing'); - else - this.render('loading'); - } -}); - -Router.route('home', { - path: '/home', - /* refactor to component. home not in use ? - waitOn: function () { - return Meteor.subscribe('inventory'); - }, - */ - action: function () { - if (this.ready()){ - - this.state.set('envName', this.params.query.env); - /* - if(query){ - //return Inventory.find({$where: "this.id_path.match('^/WebEX-Mirantis@Cisco/')"}); - console.log(query); - this.render('home', { - data: function () { - return Inventory.find({environment: query, parent_id: query}); - } - }); - // - } - */ - - // if the sub handle returned from waitOn ready() method returns - // true then we're ready to go ahead and render the page. - this.render('home'); - - } - else{ - this.render('loading'); - } - } -}); - -Router.route('getstarted', { - name: 'getstarted', - path: '/getstarted' -}); - -Router.route('/wizard', function () { - this.state.set('env', null); - Session.set('wizardEnv', null); - this.render('EnvironmentWizard'); -}); - -Router.route('/wizard/:env', function () { - this.state.set('env', this.params.env); - Session.set('wizardEnv', this.params.env); - this.render('EnvironmentWizard'); -}); - -Router.route('/scans-list', function () { - this.render('ScansList'); -}, { }); - -Router.route('/scheduled-scans-list', function () { - this.render('ScheduledScansList'); -}, { - name: 'scheduled-scans-list', - data: function () { - //let that = this; - let data = {}; - return data; - } -}); - -Router.route('/link-types-list', function () { - this.render('LinkTypesList'); -}, { }); - -Router.route('/link-type', function () { - this.render('LinkType'); -}, { }); - -Router.route('/clique-types-list', function () { - this.render('CliqueTypesList'); -}, { }); - -Router.route('/clique-type', function () { - this.render('CliqueType'); -}, { }); - -Router.route('/clique-constraints-list', function () { - this.render('CliqueConstraintsList'); -}, { }); - -Router.route('/clique-constraint', function () { - this.render('CliqueConstraint'); -}, { }); - -Router.route('/messages-list', function () { - this.render('MessagesList'); -}, { }); - -Router.route('/user-settings', function () { - this.render('UserSettings'); -}, { }); - -Router.route('/message', function () { - let that = this; - let params = that.params; - let query = params.query; - - this.render('Message', { - data: function () { - return { - id: query.id, - action: query.action - }; - } - }); -}, { }); - -Router.route('/user-list', function () { - this.render('UserList'); -}, { }); - -Router.route('/user', function () { - this.render('User'); -}, { }); - -Router.route('/scanning-request', function () { - this.render('ScanningRequest'); -}, { - name: 'scanning-request', - data: function () { - let that = this; - - let _id = - R.when(R.pipe(R.isNil, R.not), - (idObj) => R.prop('id', parseReqId(idObj)) - )(R.path(['params', 'query', '_id'], that)); - - let data = { - _id: _id, - env: that.params.query.env, - action: that.params.query.action, - }; - - return data; - } -}); - - -Router.route('/scheduled-scan', function () { - this.render('ScheduledScan'); -}, { - name: 'scheduled-scan', - data: function () { - let that = this; - - let _id = - R.when(R.pipe(R.isNil, R.not), - (idObj) => R.prop('id', parseReqId(idObj)) - )(R.path(['params', 'query', '_id'], that)); - - let data = { - _id: _id, - env: that.params.query.env, - action: that.params.query.action, - }; - - return data; - } -}); - -Router.route('/new-scanning', function () { - this.render('NewScanning'); -}, { - name: 'new-scanning', - data: function () { - let that = this; - - let data = { - env: that.params.query.env, - }; - - return data; - } -}); - -Router.route('Dashboard', { - name: 'Dashboard', - path: '/Dashboard', - /* eyaltask - waitOn: function () { - return Meteor.subscribe('inventory'); - }, - */ - action: function () { - if (this.ready()){ - this.render('Dashboard'); - - } - else{ - this.render('loading'); - } - } -}); - -Router.route('environment', { - name: 'environment', - path: '/environment/:_id', - action: function () { - if (this.ready()){ - this.render('Environment'); - } - else{ - this.render('loading'); - } - }, - data: function () { - let that = this; - - let _id = parseReqId(that.params._id).id; - let selectedNodeId = R.ifElse(R.isNil, - R.always(null), - R.pipe( - R.curry(parseReqId), - R.prop('id') - ) - )(that.params.query.selectedNodeId); - - let data = { _id: _id }; - - if (! R.isNil(selectedNodeId)) { - data = R.assoc('selectedNodeId', selectedNodeId, data); - } - - let refresh = that.params.query.r; - if (! R.isNil(refresh)) { - data = R.assoc('refresh', refresh, data); - } - - return data; - } -}); - - -Router.route('migrateEnvToUserId', { - name: 'migrateEnvToUserId', - where: 'server', - action: function () { - console.log('migrate env to user id'); - - //let request = this.request; - let response = this.response; - - let envs = Environments.find({}).fetch(); - R.forEach((env) => { - console.log('found env: ' + env.name + ' ' + R.toString(env._id)); - - let user = Meteor.users.findOne({ username: env.user }); - if (R.isNil(user)) { - console.log('not migrated: ' + env.name); - return; - } - console.log('found user: ' + user._id + ' ' + user.username); - - try { - let result = Environments.update( - { _id : env._id }, - { - $set: { - user: user._id - } - }); - console.log('result', R.toString(result)); - console.log('migrated: ' + env.name); - } catch(e) { - console.log('exception', R.toString(e)); - } - - }, envs); - - response.end('migration end'); - } -}); diff --git a/ui/osdna.js b/ui/osdna.js deleted file mode 100644 index 8eda6eb..0000000 --- a/ui/osdna.js +++ /dev/null @@ -1,9 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -cola = require('webcola'); \ No newline at end of file diff --git a/ui/package-source.sh b/ui/package-source.sh deleted file mode 100755 index 1f89901..0000000 --- a/ui/package-source.sh +++ /dev/null @@ -1,23 +0,0 @@ -######################################################################################## -# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others # -# # -# All rights reserved. This program and the accompanying materials # -# are made available under the terms of the Apache License, Version 2.0 # -# which accompanies this distribution, and is available at # -# http://www.apache.org/licenses/LICENSE-2.0 # -######################################################################################## -#!/usr/bin/env bash - -OS_TARGET_PATH=".." - -# Compress current source to a tar object. -# -exclude: Excluding specific folders and files -# -z: use gzip -# -c: create new archive -# -v: verbose log file processed -# -f: use archive file as target to build the tar to. -tar \ - --exclude='./.meteor/local' \ - --exclude='./node_modules' \ - --exclude='./.git' \ - -zcvf $OS_TARGET_PATH/calipso-source-$(date +%Y-%m-%d-%s).tar.gz . diff --git a/ui/package.json b/ui/package.json deleted file mode 100644 index 531452b..0000000 --- a/ui/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "calipso", - "version": "1.0.0", - "description": "", - "dependencies": { - "babel-runtime": "^6.23.0", - "bcrypt": "^1.0.2", - "bson": "^1.0.4", - "d3": "^4.5.0", - "jquery": "^1.9.1", - "jquery.scrollto": "^2.1.2", - "meteor-node-stubs": "^0.2.1", - "ramda": "^0.24.1", - "reactive-redux": "^1.1.0", - "redux": "^3.6.0", - "redux-thunk": "^2.1.0", - "rrule": "^2.2.0", - "webcola": "^3.1.1" - }, - "devDependencies": {}, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC" -} diff --git a/ui/public/backup - ic_cloud_queue_black_48dp_2x.png b/ui/public/backup - ic_cloud_queue_black_48dp_2x.png deleted file mode 100644 index ce8ffa5..0000000 Binary files a/ui/public/backup - ic_cloud_queue_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/cisco-favicon.ico b/ui/public/cisco-favicon.ico deleted file mode 100644 index 7cdb889..0000000 Binary files a/ui/public/cisco-favicon.ico and /dev/null differ diff --git a/ui/public/cisco-logo-load.png b/ui/public/cisco-logo-load.png deleted file mode 100644 index 6186978..0000000 Binary files a/ui/public/cisco-logo-load.png and /dev/null differ diff --git a/ui/public/dna-718905_600.png b/ui/public/dna-718905_600.png deleted file mode 100644 index 4c99cdb..0000000 Binary files a/ui/public/dna-718905_600.png and /dev/null differ diff --git a/ui/public/get-started/dashboard-notifications.png b/ui/public/get-started/dashboard-notifications.png deleted file mode 100644 index 695d783..0000000 Binary files a/ui/public/get-started/dashboard-notifications.png and /dev/null differ diff --git a/ui/public/get-started/env-dashboard.png b/ui/public/get-started/env-dashboard.png deleted file mode 100644 index cb9ba7c..0000000 Binary files a/ui/public/get-started/env-dashboard.png and /dev/null differ diff --git a/ui/public/get-started/env-delete-action.png b/ui/public/get-started/env-delete-action.png deleted file mode 100644 index 79dc801..0000000 Binary files a/ui/public/get-started/env-delete-action.png and /dev/null differ diff --git a/ui/public/get-started/env-diting-os-db-credentails.png b/ui/public/get-started/env-diting-os-db-credentails.png deleted file mode 100644 index 62bf19c..0000000 Binary files a/ui/public/get-started/env-diting-os-db-credentails.png and /dev/null differ diff --git a/ui/public/get-started/env-edit-action.png b/ui/public/get-started/env-edit-action.png deleted file mode 100644 index 04cd439..0000000 Binary files a/ui/public/get-started/env-edit-action.png and /dev/null differ diff --git a/ui/public/get-started/env-editing-amqp-credentials.png b/ui/public/get-started/env-editing-amqp-credentials.png deleted file mode 100644 index 53c77ad..0000000 Binary files a/ui/public/get-started/env-editing-amqp-credentials.png and /dev/null differ diff --git a/ui/public/get-started/env-editing-master-host-credentials.png b/ui/public/get-started/env-editing-master-host-credentials.png deleted file mode 100644 index c069c37..0000000 Binary files a/ui/public/get-started/env-editing-master-host-credentials.png and /dev/null differ diff --git a/ui/public/get-started/env-editing-monitoring.png b/ui/public/get-started/env-editing-monitoring.png deleted file mode 100644 index 0dc87bc..0000000 Binary files a/ui/public/get-started/env-editing-monitoring.png and /dev/null differ diff --git a/ui/public/get-started/env-editing-os-end-point.png b/ui/public/get-started/env-editing-os-end-point.png deleted file mode 100644 index 6221ec5..0000000 Binary files a/ui/public/get-started/env-editing-os-end-point.png and /dev/null differ diff --git a/ui/public/get-started/env-editing-provision.png b/ui/public/get-started/env-editing-provision.png deleted file mode 100644 index 5048ed0..0000000 Binary files a/ui/public/get-started/env-editing-provision.png and /dev/null differ diff --git a/ui/public/get-started/env-editing.png b/ui/public/get-started/env-editing.png deleted file mode 100644 index 2db9fc1..0000000 Binary files a/ui/public/get-started/env-editing.png and /dev/null differ diff --git a/ui/public/get-started/environments-pick.png b/ui/public/get-started/environments-pick.png deleted file mode 100644 index 8f87f71..0000000 Binary files a/ui/public/get-started/environments-pick.png and /dev/null differ diff --git a/ui/public/get-started/main-screen-explained.png b/ui/public/get-started/main-screen-explained.png deleted file mode 100644 index a23e568..0000000 Binary files a/ui/public/get-started/main-screen-explained.png and /dev/null differ diff --git a/ui/public/get-started/navbar-explained.png b/ui/public/get-started/navbar-explained.png deleted file mode 100644 index cd1ca80..0000000 Binary files a/ui/public/get-started/navbar-explained.png and /dev/null differ diff --git a/ui/public/get-started/new-environment-action.png b/ui/public/get-started/new-environment-action.png deleted file mode 100644 index 21e7f2d..0000000 Binary files a/ui/public/get-started/new-environment-action.png and /dev/null differ diff --git a/ui/public/get-started/scan-action.png b/ui/public/get-started/scan-action.png deleted file mode 100644 index b64c18e..0000000 Binary files a/ui/public/get-started/scan-action.png and /dev/null differ diff --git a/ui/public/get-started/scan-request-screen.png b/ui/public/get-started/scan-request-screen.png deleted file mode 100644 index b5859c4..0000000 Binary files a/ui/public/get-started/scan-request-screen.png and /dev/null differ diff --git a/ui/public/get-started/selecting-dashboard.png b/ui/public/get-started/selecting-dashboard.png deleted file mode 100644 index 0583123..0000000 Binary files a/ui/public/get-started/selecting-dashboard.png and /dev/null differ diff --git a/ui/public/get-started/selecting-env.png b/ui/public/get-started/selecting-env.png deleted file mode 100644 index 646830e..0000000 Binary files a/ui/public/get-started/selecting-env.png and /dev/null differ diff --git a/ui/public/get-started/setting-action.png b/ui/public/get-started/setting-action.png deleted file mode 100644 index c6b6296..0000000 Binary files a/ui/public/get-started/setting-action.png and /dev/null differ diff --git a/ui/public/get-started/setting-scans-action.png b/ui/public/get-started/setting-scans-action.png deleted file mode 100644 index cab6e39..0000000 Binary files a/ui/public/get-started/setting-scans-action.png and /dev/null differ diff --git a/ui/public/ic_cloud_queue_black_48dp_2x-green.png b/ui/public/ic_cloud_queue_black_48dp_2x-green.png deleted file mode 100644 index d5e5f77..0000000 Binary files a/ui/public/ic_cloud_queue_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_cloud_queue_black_48dp_2x-orange.png b/ui/public/ic_cloud_queue_black_48dp_2x-orange.png deleted file mode 100644 index 9c43478..0000000 Binary files a/ui/public/ic_cloud_queue_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_cloud_queue_black_48dp_2x-red.png b/ui/public/ic_cloud_queue_black_48dp_2x-red.png deleted file mode 100644 index f39b8b0..0000000 Binary files a/ui/public/ic_cloud_queue_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_cloud_queue_black_48dp_2x.png b/ui/public/ic_cloud_queue_black_48dp_2x.png deleted file mode 100644 index ce8ffa5..0000000 Binary files a/ui/public/ic_cloud_queue_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_computer_black_48dp_2x-green.png b/ui/public/ic_computer_black_48dp_2x-green.png deleted file mode 100644 index 5787e46..0000000 Binary files a/ui/public/ic_computer_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_computer_black_48dp_2x-orange.png b/ui/public/ic_computer_black_48dp_2x-orange.png deleted file mode 100644 index 37fa788..0000000 Binary files a/ui/public/ic_computer_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_computer_black_48dp_2x-red.png b/ui/public/ic_computer_black_48dp_2x-red.png deleted file mode 100644 index f32361e..0000000 Binary files a/ui/public/ic_computer_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_computer_black_48dp_2x.png b/ui/public/ic_computer_black_48dp_2x.png deleted file mode 100644 index 02741f7..0000000 Binary files a/ui/public/ic_computer_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_device_hub_black_24dp_2x-green.png b/ui/public/ic_device_hub_black_24dp_2x-green.png deleted file mode 100644 index e196065..0000000 Binary files a/ui/public/ic_device_hub_black_24dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_device_hub_black_24dp_2x-orange.png b/ui/public/ic_device_hub_black_24dp_2x-orange.png deleted file mode 100644 index 338f89b..0000000 Binary files a/ui/public/ic_device_hub_black_24dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_device_hub_black_24dp_2x-red.png b/ui/public/ic_device_hub_black_24dp_2x-red.png deleted file mode 100644 index 2688872..0000000 Binary files a/ui/public/ic_device_hub_black_24dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_device_hub_black_24dp_2x.png b/ui/public/ic_device_hub_black_24dp_2x.png deleted file mode 100644 index d5d54dc..0000000 Binary files a/ui/public/ic_device_hub_black_24dp_2x.png and /dev/null differ diff --git a/ui/public/ic_dns_black_48dp_2x-green.png b/ui/public/ic_dns_black_48dp_2x-green.png deleted file mode 100644 index 442d543..0000000 Binary files a/ui/public/ic_dns_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_dns_black_48dp_2x-orange.png b/ui/public/ic_dns_black_48dp_2x-orange.png deleted file mode 100644 index 351e3af..0000000 Binary files a/ui/public/ic_dns_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_dns_black_48dp_2x-red.png b/ui/public/ic_dns_black_48dp_2x-red.png deleted file mode 100644 index a43fddd..0000000 Binary files a/ui/public/ic_dns_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_dns_black_48dp_2x.png b/ui/public/ic_dns_black_48dp_2x.png deleted file mode 100644 index 186be89..0000000 Binary files a/ui/public/ic_dns_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_gamepad_black_48dp_2x-green.png b/ui/public/ic_gamepad_black_48dp_2x-green.png deleted file mode 100644 index 3646650..0000000 Binary files a/ui/public/ic_gamepad_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_gamepad_black_48dp_2x-orange.png b/ui/public/ic_gamepad_black_48dp_2x-orange.png deleted file mode 100644 index bde33ea..0000000 Binary files a/ui/public/ic_gamepad_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_gamepad_black_48dp_2x-red.png b/ui/public/ic_gamepad_black_48dp_2x-red.png deleted file mode 100644 index 3b44378..0000000 Binary files a/ui/public/ic_gamepad_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_gamepad_black_48dp_2x.png b/ui/public/ic_gamepad_black_48dp_2x.png deleted file mode 100644 index d558cd5..0000000 Binary files a/ui/public/ic_gamepad_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_keyboard_return_black_48dp_2x-green.png b/ui/public/ic_keyboard_return_black_48dp_2x-green.png deleted file mode 100644 index 932e31a..0000000 Binary files a/ui/public/ic_keyboard_return_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_keyboard_return_black_48dp_2x-orange.png b/ui/public/ic_keyboard_return_black_48dp_2x-orange.png deleted file mode 100644 index 7fc6134..0000000 Binary files a/ui/public/ic_keyboard_return_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_keyboard_return_black_48dp_2x-red.png b/ui/public/ic_keyboard_return_black_48dp_2x-red.png deleted file mode 100644 index 06b650a..0000000 Binary files a/ui/public/ic_keyboard_return_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_keyboard_return_black_48dp_2x.png b/ui/public/ic_keyboard_return_black_48dp_2x.png deleted file mode 100644 index 7b27ff1..0000000 Binary files a/ui/public/ic_keyboard_return_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_lens_black_48dp_2x-green.png b/ui/public/ic_lens_black_48dp_2x-green.png deleted file mode 100644 index 249ccd6..0000000 Binary files a/ui/public/ic_lens_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_lens_black_48dp_2x-orange.png b/ui/public/ic_lens_black_48dp_2x-orange.png deleted file mode 100644 index 238b3fc..0000000 Binary files a/ui/public/ic_lens_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_lens_black_48dp_2x-red.png b/ui/public/ic_lens_black_48dp_2x-red.png deleted file mode 100644 index 2ff3df7..0000000 Binary files a/ui/public/ic_lens_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_lens_black_48dp_2x.png b/ui/public/ic_lens_black_48dp_2x.png deleted file mode 100644 index d4ce2cf..0000000 Binary files a/ui/public/ic_lens_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_settings_input_composite_black_48dp_2x-green.png b/ui/public/ic_settings_input_composite_black_48dp_2x-green.png deleted file mode 100644 index 9c11848..0000000 Binary files a/ui/public/ic_settings_input_composite_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_settings_input_composite_black_48dp_2x-orange.png b/ui/public/ic_settings_input_composite_black_48dp_2x-orange.png deleted file mode 100644 index b5b1e54..0000000 Binary files a/ui/public/ic_settings_input_composite_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_settings_input_composite_black_48dp_2x-red.png b/ui/public/ic_settings_input_composite_black_48dp_2x-red.png deleted file mode 100644 index 4a2e25f..0000000 Binary files a/ui/public/ic_settings_input_composite_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_settings_input_composite_black_48dp_2x.png b/ui/public/ic_settings_input_composite_black_48dp_2x.png deleted file mode 100644 index 80407f9..0000000 Binary files a/ui/public/ic_settings_input_composite_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_settings_input_hdmi_black_48dp_2x-green.png b/ui/public/ic_settings_input_hdmi_black_48dp_2x-green.png deleted file mode 100644 index 5261c19..0000000 Binary files a/ui/public/ic_settings_input_hdmi_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_settings_input_hdmi_black_48dp_2x-orange.png b/ui/public/ic_settings_input_hdmi_black_48dp_2x-orange.png deleted file mode 100644 index 89630b4..0000000 Binary files a/ui/public/ic_settings_input_hdmi_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_settings_input_hdmi_black_48dp_2x-red.png b/ui/public/ic_settings_input_hdmi_black_48dp_2x-red.png deleted file mode 100644 index e7cf657..0000000 Binary files a/ui/public/ic_settings_input_hdmi_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_settings_input_hdmi_black_48dp_2x.png b/ui/public/ic_settings_input_hdmi_black_48dp_2x.png deleted file mode 100644 index b7427a8..0000000 Binary files a/ui/public/ic_settings_input_hdmi_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_storage_black_48dp_2x-green.png b/ui/public/ic_storage_black_48dp_2x-green.png deleted file mode 100644 index c3b5170..0000000 Binary files a/ui/public/ic_storage_black_48dp_2x-green.png and /dev/null differ diff --git a/ui/public/ic_storage_black_48dp_2x-orange.png b/ui/public/ic_storage_black_48dp_2x-orange.png deleted file mode 100644 index fe3c9dc..0000000 Binary files a/ui/public/ic_storage_black_48dp_2x-orange.png and /dev/null differ diff --git a/ui/public/ic_storage_black_48dp_2x-red.png b/ui/public/ic_storage_black_48dp_2x-red.png deleted file mode 100644 index cb1074a..0000000 Binary files a/ui/public/ic_storage_black_48dp_2x-red.png and /dev/null differ diff --git a/ui/public/ic_storage_black_48dp_2x.png b/ui/public/ic_storage_black_48dp_2x.png deleted file mode 100644 index 3a4c6b0..0000000 Binary files a/ui/public/ic_storage_black_48dp_2x.png and /dev/null differ diff --git a/ui/public/ic_tv_black_24dp_2x.png b/ui/public/ic_tv_black_24dp_2x.png deleted file mode 100644 index 64bed32..0000000 Binary files a/ui/public/ic_tv_black_24dp_2x.png and /dev/null differ diff --git a/ui/public/ic_zoom_out_map_black_24dp_2x.png b/ui/public/ic_zoom_out_map_black_24dp_2x.png deleted file mode 100644 index 4302da8..0000000 Binary files a/ui/public/ic_zoom_out_map_black_24dp_2x.png and /dev/null differ diff --git a/ui/public/images/calipso-logo.jpg b/ui/public/images/calipso-logo.jpg deleted file mode 100644 index 9a47732..0000000 Binary files a/ui/public/images/calipso-logo.jpg and /dev/null differ diff --git a/ui/public/instance.png b/ui/public/instance.png deleted file mode 100644 index 06e2c1c..0000000 Binary files a/ui/public/instance.png and /dev/null differ diff --git a/ui/public/landing/calipso-logo.png b/ui/public/landing/calipso-logo.png deleted file mode 100644 index b93de04..0000000 Binary files a/ui/public/landing/calipso-logo.png and /dev/null differ diff --git a/ui/public/landing/docker.png b/ui/public/landing/docker.png deleted file mode 100644 index 884beb7..0000000 Binary files a/ui/public/landing/docker.png and /dev/null differ diff --git a/ui/public/landing/eye.png b/ui/public/landing/eye.png deleted file mode 100644 index c2e587f..0000000 Binary files a/ui/public/landing/eye.png and /dev/null differ diff --git a/ui/public/landing/first.png b/ui/public/landing/first.png deleted file mode 100644 index ff5b6ec..0000000 Binary files a/ui/public/landing/first.png and /dev/null differ diff --git a/ui/public/landing/graph.png b/ui/public/landing/graph.png deleted file mode 100644 index 7a70522..0000000 Binary files a/ui/public/landing/graph.png and /dev/null differ diff --git a/ui/public/landing/main-screen.png b/ui/public/landing/main-screen.png deleted file mode 100644 index 258c093..0000000 Binary files a/ui/public/landing/main-screen.png and /dev/null differ diff --git a/ui/public/landing/openstack.png b/ui/public/landing/openstack.png deleted file mode 100644 index 2603a9d..0000000 Binary files a/ui/public/landing/openstack.png and /dev/null differ diff --git a/ui/public/logo-cisco-png.png b/ui/public/logo-cisco-png.png deleted file mode 100644 index 55cff5f..0000000 Binary files a/ui/public/logo-cisco-png.png and /dev/null differ diff --git a/ui/public/logo-cisco.svg b/ui/public/logo-cisco.svg deleted file mode 100644 index bc541f0..0000000 --- a/ui/public/logo-cisco.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/ui/public/logo_microscope_3.png b/ui/public/logo_microscope_3.png deleted file mode 100644 index 315594c..0000000 Binary files a/ui/public/logo_microscope_3.png and /dev/null differ diff --git a/ui/public/network.png b/ui/public/network.png deleted file mode 100644 index 60fc85d..0000000 Binary files a/ui/public/network.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-green.png b/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-green.png deleted file mode 100644 index 04d3eaf..0000000 Binary files a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-green.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-orange.png b/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-orange.png deleted file mode 100644 index ff9782a..0000000 Binary files a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-orange.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-red.png b/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-red.png deleted file mode 100644 index 2b3e34f..0000000 Binary files a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x-red.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x.png b/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x.png deleted file mode 100644 index 69589e4..0000000 Binary files a/ui/public/old-2017-09-25/ic_device_hub_black_24dp_2x.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_tv_black_24dp_2x-old-2017-09-25.png b/ui/public/old-2017-09-25/ic_tv_black_24dp_2x-old-2017-09-25.png deleted file mode 100644 index f2ff5cd..0000000 Binary files a/ui/public/old-2017-09-25/ic_tv_black_24dp_2x-old-2017-09-25.png and /dev/null differ diff --git a/ui/public/old-2017-09-25/ic_zoom_out_map_black_24dp_2x-old-2017-09-25.png b/ui/public/old-2017-09-25/ic_zoom_out_map_black_24dp_2x-old-2017-09-25.png deleted file mode 100644 index 42db20f..0000000 Binary files a/ui/public/old-2017-09-25/ic_zoom_out_map_black_24dp_2x-old-2017-09-25.png and /dev/null differ diff --git a/ui/public/particle.png b/ui/public/particle.png deleted file mode 100644 index 4ed564a..0000000 Binary files a/ui/public/particle.png and /dev/null differ diff --git a/ui/public/pnic.jpg b/ui/public/pnic.jpg deleted file mode 100644 index 0068850..0000000 Binary files a/ui/public/pnic.jpg and /dev/null differ diff --git a/ui/public/vconnector.png b/ui/public/vconnector.png deleted file mode 100644 index f41080d..0000000 Binary files a/ui/public/vconnector.png and /dev/null differ diff --git a/ui/public/vnic.png b/ui/public/vnic.png deleted file mode 100644 index 660328d..0000000 Binary files a/ui/public/vnic.png and /dev/null differ diff --git a/ui/public/vservice.png b/ui/public/vservice.png deleted file mode 100644 index 86168de..0000000 Binary files a/ui/public/vservice.png and /dev/null differ diff --git a/ui/public/wiki/addNewEnv.png b/ui/public/wiki/addNewEnv.png deleted file mode 100644 index 463ada7..0000000 Binary files a/ui/public/wiki/addNewEnv.png and /dev/null differ diff --git a/ui/public/wiki/addNewEnv1.png b/ui/public/wiki/addNewEnv1.png deleted file mode 100644 index 41300b7..0000000 Binary files a/ui/public/wiki/addNewEnv1.png and /dev/null differ diff --git a/ui/public/wiki/wizard1.png b/ui/public/wiki/wizard1.png deleted file mode 100644 index 1d925a4..0000000 Binary files a/ui/public/wiki/wizard1.png and /dev/null differ diff --git a/ui/public/wiki/wizard2.png b/ui/public/wiki/wizard2.png deleted file mode 100644 index d756ca3..0000000 Binary files a/ui/public/wiki/wizard2.png and /dev/null differ diff --git a/ui/public/wiki/wizard3.png b/ui/public/wiki/wizard3.png deleted file mode 100644 index 6735146..0000000 Binary files a/ui/public/wiki/wizard3.png and /dev/null differ diff --git a/ui/public/wiki/wizard4.png b/ui/public/wiki/wizard4.png deleted file mode 100644 index 42b57a6..0000000 Binary files a/ui/public/wiki/wizard4.png and /dev/null differ diff --git a/ui/readme.md b/ui/readme.md deleted file mode 100644 index 7dfb79e..0000000 --- a/ui/readme.md +++ /dev/null @@ -1,43 +0,0 @@ -# Calipso - -## Run - -```bash -./run.sh -``` - -## Build - -```bash -meteor build --architecture=os.linux.x86_64 ./ -``` - -### Soruce Build - -```bash -tar --exclude='./.meteor/local' --exclude='./node_modules' --exclude='./.git' -zcvf ../calipso-source-$(date +%Y-%m-%d).tar.gz . -``` -## Testing - Build with Docker - -Testing on staging - -```bash -docker run -d \ - -e ROOT_URL=http://testing-server-example.com \ - -e MONGO_URL=mongodb://testing-server-example.com:27017/calipso \ - -v /home/ofir/calipso:/bundle \ - -p 80:80 \ - kadirahq/meteord:base -``` - -Testing on local - -```bash -docker run \ - --net=host \ - -e ROOT_URL=http://localhost \ - -e MONGO_URL=mongodb://localhost:27017/calipso \ - -v /home/eyal_work/projects/cisco/output:/bundle \ - kadirahq/meteord:base -``` - diff --git a/ui/run b/ui/run deleted file mode 100755 index a4e2a39..0000000 --- a/ui/run +++ /dev/null @@ -1,3 +0,0 @@ -# run meteor with different mongo -MONGO_URL=mongodb://localhost:27017/osdna meteor run -# MONGO_URL=mongodb://calipso:calipso_default@64.103.124.119:27017/calipso meteor run diff --git a/ui/run-dev.sh b/ui/run-dev.sh deleted file mode 100755 index d35659e..0000000 --- a/ui/run-dev.sh +++ /dev/null @@ -1,10 +0,0 @@ -######################################################################################## -# Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others # -# # -# All rights reserved. This program and the accompanying materials # -# are made available under the terms of the Apache License, Version 2.0 # -# which accompanies this distribution, and is available at # -# http://www.apache.org/licenses/LICENSE-2.0 # -######################################################################################## -# run meteor with different mongo -MONGO_URL=mongodb://osdna:Oki9wse3@10.56.20.80:27017/osdna meteor run diff --git a/ui/server/main.js b/ui/server/main.js deleted file mode 100644 index ad0bdf3..0000000 --- a/ui/server/main.js +++ /dev/null @@ -1,10 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2017 Koren Lev (Cisco Systems), Yaron Yogev (Cisco Systems) and others / -// / -// All rights reserved. This program and the accompanying materials / -// are made available under the terms of the Apache License, Version 2.0 / -// which accompanies this distribution, and is available at / -// http://www.apache.org/licenses/LICENSE-2.0 / -///////////////////////////////////////////////////////////////////////////////////////// -import '/imports/startup/server'; -import '/imports/startup/both'; -- cgit 1.2.3-korg