mtncloud-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +20 -0
  3. data/.github/pull_request_template.md +14 -0
  4. data/.github/workflows/ci.yml +56 -0
  5. data/.github/workflows/release.yml +46 -0
  6. data/.gitignore +25 -0
  7. data/CLAUDE.md +24 -0
  8. data/CONTRIBUTING.md +91 -0
  9. data/Dockerfile +19 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +23 -0
  12. data/README.md +187 -0
  13. data/Rakefile +26 -0
  14. data/bin/mcs +3 -0
  15. data/bin/mtncloud +27 -0
  16. data/lib/mtncloud/api/account_groups_interface.rb +48 -0
  17. data/lib/mtncloud/api/account_users_interface.rb +68 -0
  18. data/lib/mtncloud/api/accounts_interface.rb +9 -0
  19. data/lib/mtncloud/api/activity_interface.rb +9 -0
  20. data/lib/mtncloud/api/affinity_groups_interface.rb +46 -0
  21. data/lib/mtncloud/api/api_client.rb +1091 -0
  22. data/lib/mtncloud/api/appliance_settings_interface.rb +49 -0
  23. data/lib/mtncloud/api/approvals_interface.rb +32 -0
  24. data/lib/mtncloud/api/apps_interface.rb +180 -0
  25. data/lib/mtncloud/api/archive_buckets_interface.rb +116 -0
  26. data/lib/mtncloud/api/archive_files_interface.rb +173 -0
  27. data/lib/mtncloud/api/audit_interface.rb +9 -0
  28. data/lib/mtncloud/api/auth_interface.rb +58 -0
  29. data/lib/mtncloud/api/backup_jobs_interface.rb +13 -0
  30. data/lib/mtncloud/api/backup_restores_interface.rb +27 -0
  31. data/lib/mtncloud/api/backup_results_interface.rb +32 -0
  32. data/lib/mtncloud/api/backup_service_types_interface.rb +9 -0
  33. data/lib/mtncloud/api/backup_services_interface.rb +9 -0
  34. data/lib/mtncloud/api/backup_settings_interface.rb +20 -0
  35. data/lib/mtncloud/api/backup_types_interface.rb +9 -0
  36. data/lib/mtncloud/api/backups_interface.rb +21 -0
  37. data/lib/mtncloud/api/billing_interface.rb +34 -0
  38. data/lib/mtncloud/api/blueprints_interface.rb +70 -0
  39. data/lib/mtncloud/api/body_io.rb +22 -0
  40. data/lib/mtncloud/api/budgets_interface.rb +48 -0
  41. data/lib/mtncloud/api/catalog_item_types_interface.rb +29 -0
  42. data/lib/mtncloud/api/certificate_types_interface.rb +14 -0
  43. data/lib/mtncloud/api/certificates_interface.rb +9 -0
  44. data/lib/mtncloud/api/clients_interface.rb +41 -0
  45. data/lib/mtncloud/api/cloud_datastores_interface.rb +48 -0
  46. data/lib/mtncloud/api/cloud_folders_interface.rb +41 -0
  47. data/lib/mtncloud/api/cloud_policies_interface.rb +41 -0
  48. data/lib/mtncloud/api/cloud_resource_pools_interface.rb +66 -0
  49. data/lib/mtncloud/api/clouds_interface.rb +217 -0
  50. data/lib/mtncloud/api/clusters_interface.rb +471 -0
  51. data/lib/mtncloud/api/containers_interface.rb +145 -0
  52. data/lib/mtncloud/api/credential_types_interface.rb +9 -0
  53. data/lib/mtncloud/api/credentials_interface.rb +9 -0
  54. data/lib/mtncloud/api/custom_instance_types_interface.rb +99 -0
  55. data/lib/mtncloud/api/cypher_interface.rb +51 -0
  56. data/lib/mtncloud/api/dashboard_interface.rb +14 -0
  57. data/lib/mtncloud/api/datastores_interface.rb +21 -0
  58. data/lib/mtncloud/api/deploy_interface.rb +44 -0
  59. data/lib/mtncloud/api/deployments_interface.rb +79 -0
  60. data/lib/mtncloud/api/distributed_workers_interface.rb +41 -0
  61. data/lib/mtncloud/api/email_templates_interface.rb +53 -0
  62. data/lib/mtncloud/api/environments_interface.rb +48 -0
  63. data/lib/mtncloud/api/execute_schedules_interface.rb +71 -0
  64. data/lib/mtncloud/api/execution_request_interface.rb +27 -0
  65. data/lib/mtncloud/api/file_copy_request_interface.rb +68 -0
  66. data/lib/mtncloud/api/forgot_password_interface.rb +17 -0
  67. data/lib/mtncloud/api/group_policies_interface.rb +41 -0
  68. data/lib/mtncloud/api/groups_interface.rb +73 -0
  69. data/lib/mtncloud/api/guidance_interface.rb +44 -0
  70. data/lib/mtncloud/api/guidance_settings_interface.rb +17 -0
  71. data/lib/mtncloud/api/health_interface.rb +100 -0
  72. data/lib/mtncloud/api/host_vm_groups_interface.rb +37 -0
  73. data/lib/mtncloud/api/hub_interface.rb +25 -0
  74. data/lib/mtncloud/api/image_builder_boot_scripts_interface.rb +41 -0
  75. data/lib/mtncloud/api/image_builder_image_builds_interface.rb +73 -0
  76. data/lib/mtncloud/api/image_builder_interface.rb +20 -0
  77. data/lib/mtncloud/api/image_builder_preseed_scripts_interface.rb +41 -0
  78. data/lib/mtncloud/api/instance_types_interface.rb +20 -0
  79. data/lib/mtncloud/api/instances_interface.rb +453 -0
  80. data/lib/mtncloud/api/integration_types_interface.rb +14 -0
  81. data/lib/mtncloud/api/integrations_interface.rb +74 -0
  82. data/lib/mtncloud/api/invoice_line_items_interface.rb +9 -0
  83. data/lib/mtncloud/api/invoices_interface.rb +28 -0
  84. data/lib/mtncloud/api/jobs_interface.rb +83 -0
  85. data/lib/mtncloud/api/key_pairs_interface.rb +57 -0
  86. data/lib/mtncloud/api/library_cluster_layouts_interface.rb +47 -0
  87. data/lib/mtncloud/api/library_cluster_packages_interface.rb +60 -0
  88. data/lib/mtncloud/api/library_container_scripts_interface.rb +43 -0
  89. data/lib/mtncloud/api/library_container_templates_interface.rb +43 -0
  90. data/lib/mtncloud/api/library_container_types_interface.rb +59 -0
  91. data/lib/mtncloud/api/library_container_upgrades_interface.rb +60 -0
  92. data/lib/mtncloud/api/library_instance_types_interface.rb +74 -0
  93. data/lib/mtncloud/api/library_layouts_interface.rb +69 -0
  94. data/lib/mtncloud/api/library_operating_systems_interface.rb +63 -0
  95. data/lib/mtncloud/api/library_spec_template_types_interface.rb +43 -0
  96. data/lib/mtncloud/api/library_spec_templates_interface.rb +43 -0
  97. data/lib/mtncloud/api/license_interface.rb +30 -0
  98. data/lib/mtncloud/api/load_balancer_monitors_interface.rb +9 -0
  99. data/lib/mtncloud/api/load_balancer_pool_nodes_interface.rb +8 -0
  100. data/lib/mtncloud/api/load_balancer_pools_interface.rb +9 -0
  101. data/lib/mtncloud/api/load_balancer_pools_secondary_interface.rb +9 -0
  102. data/lib/mtncloud/api/load_balancer_profiles_interface.rb +9 -0
  103. data/lib/mtncloud/api/load_balancer_types_interface.rb +9 -0
  104. data/lib/mtncloud/api/load_balancer_virtual_servers_interface.rb +18 -0
  105. data/lib/mtncloud/api/load_balancers_interface.rb +14 -0
  106. data/lib/mtncloud/api/log_settings_interface.rb +44 -0
  107. data/lib/mtncloud/api/logs_interface.rb +37 -0
  108. data/lib/mtncloud/api/migrations_interface.rb +49 -0
  109. data/lib/mtncloud/api/monitoring_alerts_interface.rb +39 -0
  110. data/lib/mtncloud/api/monitoring_apps_interface.rb +69 -0
  111. data/lib/mtncloud/api/monitoring_checks_interface.rb +103 -0
  112. data/lib/mtncloud/api/monitoring_contacts_interface.rb +41 -0
  113. data/lib/mtncloud/api/monitoring_groups_interface.rb +77 -0
  114. data/lib/mtncloud/api/monitoring_incidents_interface.rb +107 -0
  115. data/lib/mtncloud/api/monitoring_interface.rb +35 -0
  116. data/lib/mtncloud/api/monitoring_settings_interface.rb +21 -0
  117. data/lib/mtncloud/api/network_dhcp_relays_interface.rb +36 -0
  118. data/lib/mtncloud/api/network_dhcp_servers_interface.rb +36 -0
  119. data/lib/mtncloud/api/network_domain_records_interface.rb +41 -0
  120. data/lib/mtncloud/api/network_domains_interface.rb +41 -0
  121. data/lib/mtncloud/api/network_edge_clusters_interface.rb +26 -0
  122. data/lib/mtncloud/api/network_floating_ips_interface.rb +40 -0
  123. data/lib/mtncloud/api/network_groups_interface.rb +41 -0
  124. data/lib/mtncloud/api/network_pool_ips_interface.rb +41 -0
  125. data/lib/mtncloud/api/network_pool_server_types_interface.rb +9 -0
  126. data/lib/mtncloud/api/network_pool_servers_interface.rb +48 -0
  127. data/lib/mtncloud/api/network_pools_interface.rb +41 -0
  128. data/lib/mtncloud/api/network_proxies_interface.rb +41 -0
  129. data/lib/mtncloud/api/network_routers_interface.rb +181 -0
  130. data/lib/mtncloud/api/network_security_server_types_interface.rb +9 -0
  131. data/lib/mtncloud/api/network_security_servers_interface.rb +27 -0
  132. data/lib/mtncloud/api/network_server_groups_interface.rb +7 -0
  133. data/lib/mtncloud/api/network_server_types_interface.rb +9 -0
  134. data/lib/mtncloud/api/network_servers_interface.rb +102 -0
  135. data/lib/mtncloud/api/network_services_interface.rb +63 -0
  136. data/lib/mtncloud/api/network_static_routes_interface.rb +36 -0
  137. data/lib/mtncloud/api/network_subnets_interface.rb +42 -0
  138. data/lib/mtncloud/api/network_types_interface.rb +20 -0
  139. data/lib/mtncloud/api/networks_interface.rb +48 -0
  140. data/lib/mtncloud/api/option_type_forms_interface.rb +9 -0
  141. data/lib/mtncloud/api/option_type_lists_interface.rb +53 -0
  142. data/lib/mtncloud/api/option_types_interface.rb +41 -0
  143. data/lib/mtncloud/api/options_interface.rb +17 -0
  144. data/lib/mtncloud/api/packages_interface.rb +112 -0
  145. data/lib/mtncloud/api/ping_interface.rb +22 -0
  146. data/lib/mtncloud/api/plugins_interface.rb +22 -0
  147. data/lib/mtncloud/api/policies_interface.rb +56 -0
  148. data/lib/mtncloud/api/power_schedules_interface.rb +71 -0
  149. data/lib/mtncloud/api/price_sets_interface.rb +39 -0
  150. data/lib/mtncloud/api/prices_interface.rb +71 -0
  151. data/lib/mtncloud/api/processes_interface.rb +40 -0
  152. data/lib/mtncloud/api/projects_interface.rb +33 -0
  153. data/lib/mtncloud/api/provision_types_interface.rb +24 -0
  154. data/lib/mtncloud/api/provisioning_license_types_interface.rb +31 -0
  155. data/lib/mtncloud/api/provisioning_licenses_interface.rb +60 -0
  156. data/lib/mtncloud/api/provisioning_settings_interface.rb +26 -0
  157. data/lib/mtncloud/api/read_interface.rb +24 -0
  158. data/lib/mtncloud/api/reports_interface.rb +70 -0
  159. data/lib/mtncloud/api/resource_pool_groups_interface.rb +51 -0
  160. data/lib/mtncloud/api/rest_interface.rb +37 -0
  161. data/lib/mtncloud/api/roles_interface.rb +151 -0
  162. data/lib/mtncloud/api/scale_thresholds_interface.rb +9 -0
  163. data/lib/mtncloud/api/search_interface.rb +13 -0
  164. data/lib/mtncloud/api/secondary_read_interface.rb +25 -0
  165. data/lib/mtncloud/api/secondary_rest_interface.rb +42 -0
  166. data/lib/mtncloud/api/security_group_rules_interface.rb +35 -0
  167. data/lib/mtncloud/api/security_groups_interface.rb +56 -0
  168. data/lib/mtncloud/api/security_package_types_interface.rb +9 -0
  169. data/lib/mtncloud/api/security_packages_interface.rb +9 -0
  170. data/lib/mtncloud/api/security_scans_interface.rb +9 -0
  171. data/lib/mtncloud/api/server_devices_interface.rb +30 -0
  172. data/lib/mtncloud/api/server_types_interface.rb +20 -0
  173. data/lib/mtncloud/api/servers_interface.rb +230 -0
  174. data/lib/mtncloud/api/service_catalog_interface.rb +89 -0
  175. data/lib/mtncloud/api/service_plans_interface.rb +62 -0
  176. data/lib/mtncloud/api/setup_interface.rb +46 -0
  177. data/lib/mtncloud/api/snapshots_interface.rb +19 -0
  178. data/lib/mtncloud/api/storage_datastores_interface.rb +44 -0
  179. data/lib/mtncloud/api/storage_providers_interface.rb +151 -0
  180. data/lib/mtncloud/api/storage_server_types_interface.rb +14 -0
  181. data/lib/mtncloud/api/storage_servers_interface.rb +9 -0
  182. data/lib/mtncloud/api/storage_volume_types_interface.rb +9 -0
  183. data/lib/mtncloud/api/storage_volumes_interface.rb +24 -0
  184. data/lib/mtncloud/api/subnet_types_interface.rb +20 -0
  185. data/lib/mtncloud/api/subnets_interface.rb +41 -0
  186. data/lib/mtncloud/api/support_bundles_interface.rb +46 -0
  187. data/lib/mtncloud/api/system_types_interface.rb +13 -0
  188. data/lib/mtncloud/api/systems_interface.rb +55 -0
  189. data/lib/mtncloud/api/task_sets_interface.rb +52 -0
  190. data/lib/mtncloud/api/tasks_interface.rb +66 -0
  191. data/lib/mtncloud/api/tokens_interface.rb +39 -0
  192. data/lib/mtncloud/api/usage_interface.rb +18 -0
  193. data/lib/mtncloud/api/user_groups_interface.rb +59 -0
  194. data/lib/mtncloud/api/user_settings_interface.rb +90 -0
  195. data/lib/mtncloud/api/user_sources_interface.rb +99 -0
  196. data/lib/mtncloud/api/users_interface.rb +33 -0
  197. data/lib/mtncloud/api/vdi_allocations_interface.rb +9 -0
  198. data/lib/mtncloud/api/vdi_apps_interface.rb +9 -0
  199. data/lib/mtncloud/api/vdi_gateways_interface.rb +9 -0
  200. data/lib/mtncloud/api/vdi_interface.rb +28 -0
  201. data/lib/mtncloud/api/vdi_pools_interface.rb +19 -0
  202. data/lib/mtncloud/api/virtual_images_interface.rb +210 -0
  203. data/lib/mtncloud/api/virtual_servers_interface.rb +9 -0
  204. data/lib/mtncloud/api/virtual_switches_interface.rb +9 -0
  205. data/lib/mtncloud/api/whitelabel_settings_interface.rb +57 -0
  206. data/lib/mtncloud/api/whoami_interface.rb +13 -0
  207. data/lib/mtncloud/api/wiki_interface.rb +48 -0
  208. data/lib/mtncloud/api.rb +12 -0
  209. data/lib/mtncloud/benchmarking.rb +259 -0
  210. data/lib/mtncloud/cli/cli_command.rb +2281 -0
  211. data/lib/mtncloud/cli/cli_registry.rb +337 -0
  212. data/lib/mtncloud/cli/commands/access_token_command.rb +201 -0
  213. data/lib/mtncloud/cli/commands/account_groups_command.rb +530 -0
  214. data/lib/mtncloud/cli/commands/activity_command.rb +149 -0
  215. data/lib/mtncloud/cli/commands/affinity_groups_command.rb +554 -0
  216. data/lib/mtncloud/cli/commands/alias_command.rb +278 -0
  217. data/lib/mtncloud/cli/commands/appliance_settings_command.rb +382 -0
  218. data/lib/mtncloud/cli/commands/approvals_command.rb +236 -0
  219. data/lib/mtncloud/cli/commands/apps.rb +2549 -0
  220. data/lib/mtncloud/cli/commands/archives_command.rb +2161 -0
  221. data/lib/mtncloud/cli/commands/audit.rb +188 -0
  222. data/lib/mtncloud/cli/commands/backup_jobs_command.rb +366 -0
  223. data/lib/mtncloud/cli/commands/backup_restores_command.rb +144 -0
  224. data/lib/mtncloud/cli/commands/backup_results_command.rb +149 -0
  225. data/lib/mtncloud/cli/commands/backup_services_command.rb +44 -0
  226. data/lib/mtncloud/cli/commands/backup_settings_command.rb +184 -0
  227. data/lib/mtncloud/cli/commands/backup_types_command.rb +53 -0
  228. data/lib/mtncloud/cli/commands/backups_command.rb +674 -0
  229. data/lib/mtncloud/cli/commands/benchmark_command.rb +458 -0
  230. data/lib/mtncloud/cli/commands/blueprints_command.rb +2297 -0
  231. data/lib/mtncloud/cli/commands/boot_scripts_command.rb +379 -0
  232. data/lib/mtncloud/cli/commands/budgets_command.rb +754 -0
  233. data/lib/mtncloud/cli/commands/cat_command.rb +45 -0
  234. data/lib/mtncloud/cli/commands/catalog_item_types_command.rb +858 -0
  235. data/lib/mtncloud/cli/commands/certificates_command.rb +575 -0
  236. data/lib/mtncloud/cli/commands/change_password_command.rb +132 -0
  237. data/lib/mtncloud/cli/commands/clients_command.rb +331 -0
  238. data/lib/mtncloud/cli/commands/cloud_datastores_command.rb +543 -0
  239. data/lib/mtncloud/cli/commands/cloud_folders_command.rb +512 -0
  240. data/lib/mtncloud/cli/commands/cloud_resource_pools_command.rb +870 -0
  241. data/lib/mtncloud/cli/commands/clouds.rb +2037 -0
  242. data/lib/mtncloud/cli/commands/clouds_types.rb +140 -0
  243. data/lib/mtncloud/cli/commands/cluster_types.rb +179 -0
  244. data/lib/mtncloud/cli/commands/clusters.rb +5855 -0
  245. data/lib/mtncloud/cli/commands/coloring_command.rb +82 -0
  246. data/lib/mtncloud/cli/commands/containers_command.rb +967 -0
  247. data/lib/mtncloud/cli/commands/credential_types_command.rb +36 -0
  248. data/lib/mtncloud/cli/commands/credentials_command.rb +124 -0
  249. data/lib/mtncloud/cli/commands/curl_command.rb +168 -0
  250. data/lib/mtncloud/cli/commands/cypher_command.rb +587 -0
  251. data/lib/mtncloud/cli/commands/dashboard_command.rb +300 -0
  252. data/lib/mtncloud/cli/commands/debug_command.rb +75 -0
  253. data/lib/mtncloud/cli/commands/deploy.rb +485 -0
  254. data/lib/mtncloud/cli/commands/deployments.rb +923 -0
  255. data/lib/mtncloud/cli/commands/deploys.rb +485 -0
  256. data/lib/mtncloud/cli/commands/distributed_workers_command.rb +282 -0
  257. data/lib/mtncloud/cli/commands/echo_command.rb +61 -0
  258. data/lib/mtncloud/cli/commands/edit_profile_command.rb +57 -0
  259. data/lib/mtncloud/cli/commands/edit_rc_command.rb +77 -0
  260. data/lib/mtncloud/cli/commands/email_templates_command.rb +373 -0
  261. data/lib/mtncloud/cli/commands/environments_command.rb +401 -0
  262. data/lib/mtncloud/cli/commands/execute_schedules_command.rb +735 -0
  263. data/lib/mtncloud/cli/commands/execution_request_command.rb +333 -0
  264. data/lib/mtncloud/cli/commands/exit_command.rb +34 -0
  265. data/lib/mtncloud/cli/commands/file_copy_request_command.rb +352 -0
  266. data/lib/mtncloud/cli/commands/forgot_password.rb +133 -0
  267. data/lib/mtncloud/cli/commands/get_prompt_command.rb +36 -0
  268. data/lib/mtncloud/cli/commands/groups.rb +818 -0
  269. data/lib/mtncloud/cli/commands/guidance_command.rb +529 -0
  270. data/lib/mtncloud/cli/commands/guidance_settings.rb +148 -0
  271. data/lib/mtncloud/cli/commands/health_command.rb +1046 -0
  272. data/lib/mtncloud/cli/commands/history_command.rb +60 -0
  273. data/lib/mtncloud/cli/commands/host_vm_groups_command.rb +423 -0
  274. data/lib/mtncloud/cli/commands/hosts.rb +2986 -0
  275. data/lib/mtncloud/cli/commands/hub.rb +215 -0
  276. data/lib/mtncloud/cli/commands/image_builder_command.rb +1197 -0
  277. data/lib/mtncloud/cli/commands/instance_types.rb +163 -0
  278. data/lib/mtncloud/cli/commands/instances.rb +5813 -0
  279. data/lib/mtncloud/cli/commands/integrations_command.rb +1412 -0
  280. data/lib/mtncloud/cli/commands/invoices_command.rb +1151 -0
  281. data/lib/mtncloud/cli/commands/jobs_command.rb +998 -0
  282. data/lib/mtncloud/cli/commands/key_pairs.rb +470 -0
  283. data/lib/mtncloud/cli/commands/library_cluster_layouts_command.rb +901 -0
  284. data/lib/mtncloud/cli/commands/library_cluster_packages_command.rb +552 -0
  285. data/lib/mtncloud/cli/commands/library_container_scripts_command.rb +446 -0
  286. data/lib/mtncloud/cli/commands/library_container_templates_command.rb +526 -0
  287. data/lib/mtncloud/cli/commands/library_container_types_command.rb +698 -0
  288. data/lib/mtncloud/cli/commands/library_forms_command.rb +625 -0
  289. data/lib/mtncloud/cli/commands/library_instance_types_command.rb +668 -0
  290. data/lib/mtncloud/cli/commands/library_layouts_command.rb +849 -0
  291. data/lib/mtncloud/cli/commands/library_operating_systems_command.rb +671 -0
  292. data/lib/mtncloud/cli/commands/library_option_lists_command.rb +503 -0
  293. data/lib/mtncloud/cli/commands/library_option_types_command.rb +329 -0
  294. data/lib/mtncloud/cli/commands/library_spec_templates_command.rb +547 -0
  295. data/lib/mtncloud/cli/commands/library_upgrades_command.rb +596 -0
  296. data/lib/mtncloud/cli/commands/license.rb +475 -0
  297. data/lib/mtncloud/cli/commands/load_balancer_monitors.rb +70 -0
  298. data/lib/mtncloud/cli/commands/load_balancer_pool_nodes.rb +87 -0
  299. data/lib/mtncloud/cli/commands/load_balancer_pools.rb +129 -0
  300. data/lib/mtncloud/cli/commands/load_balancer_profiles.rb +64 -0
  301. data/lib/mtncloud/cli/commands/load_balancer_types.rb +38 -0
  302. data/lib/mtncloud/cli/commands/load_balancer_virtual_servers.rb +147 -0
  303. data/lib/mtncloud/cli/commands/load_balancers.rb +189 -0
  304. data/lib/mtncloud/cli/commands/log_level_command.rb +54 -0
  305. data/lib/mtncloud/cli/commands/log_settings_command.rb +443 -0
  306. data/lib/mtncloud/cli/commands/login.rb +148 -0
  307. data/lib/mtncloud/cli/commands/logout.rb +63 -0
  308. data/lib/mtncloud/cli/commands/logs_command.rb +140 -0
  309. data/lib/mtncloud/cli/commands/man_command.rb +409 -0
  310. data/lib/mtncloud/cli/commands/migrations.rb +453 -0
  311. data/lib/mtncloud/cli/commands/monitoring_alerts_command.rb +791 -0
  312. data/lib/mtncloud/cli/commands/monitoring_apps_command.rb +716 -0
  313. data/lib/mtncloud/cli/commands/monitoring_checks_command.rb +766 -0
  314. data/lib/mtncloud/cli/commands/monitoring_contacts_command.rb +339 -0
  315. data/lib/mtncloud/cli/commands/monitoring_groups_command.rb +674 -0
  316. data/lib/mtncloud/cli/commands/monitoring_incidents_command.rb +835 -0
  317. data/lib/mtncloud/cli/commands/monitoring_settings.rb +212 -0
  318. data/lib/mtncloud/cli/commands/network_dhcp_relays_command.rb +375 -0
  319. data/lib/mtncloud/cli/commands/network_dhcp_servers_command.rb +366 -0
  320. data/lib/mtncloud/cli/commands/network_domains_command.rb +896 -0
  321. data/lib/mtncloud/cli/commands/network_edge_clusters_command.rb +288 -0
  322. data/lib/mtncloud/cli/commands/network_firewalls_command.rb +783 -0
  323. data/lib/mtncloud/cli/commands/network_floating_ips.rb +147 -0
  324. data/lib/mtncloud/cli/commands/network_groups_command.rb +654 -0
  325. data/lib/mtncloud/cli/commands/network_pool_server_types.rb +20 -0
  326. data/lib/mtncloud/cli/commands/network_pool_servers_command.rb +318 -0
  327. data/lib/mtncloud/cli/commands/network_pools_command.rb +903 -0
  328. data/lib/mtncloud/cli/commands/network_proxies_command.rb +578 -0
  329. data/lib/mtncloud/cli/commands/network_routers_command.rb +2628 -0
  330. data/lib/mtncloud/cli/commands/network_security_server_types.rb +20 -0
  331. data/lib/mtncloud/cli/commands/network_server_groups_command.rb +222 -0
  332. data/lib/mtncloud/cli/commands/network_server_types_command.rb +20 -0
  333. data/lib/mtncloud/cli/commands/network_servers_command.rb +398 -0
  334. data/lib/mtncloud/cli/commands/network_services_command.rb +198 -0
  335. data/lib/mtncloud/cli/commands/network_static_routes_command.rb +451 -0
  336. data/lib/mtncloud/cli/commands/network_transport_zones_command.rb +412 -0
  337. data/lib/mtncloud/cli/commands/networks_command.rb +1692 -0
  338. data/lib/mtncloud/cli/commands/open_command.rb +30 -0
  339. data/lib/mtncloud/cli/commands/options.rb +231 -0
  340. data/lib/mtncloud/cli/commands/packages_command.rb +822 -0
  341. data/lib/mtncloud/cli/commands/ping.rb +242 -0
  342. data/lib/mtncloud/cli/commands/plugins.rb +214 -0
  343. data/lib/mtncloud/cli/commands/policies_command.rb +990 -0
  344. data/lib/mtncloud/cli/commands/power_schedules_command.rb +731 -0
  345. data/lib/mtncloud/cli/commands/preseed_scripts_command.rb +378 -0
  346. data/lib/mtncloud/cli/commands/price_sets_command.rb +557 -0
  347. data/lib/mtncloud/cli/commands/prices_command.rb +692 -0
  348. data/lib/mtncloud/cli/commands/processes_command.rb +469 -0
  349. data/lib/mtncloud/cli/commands/projects_command.rb +537 -0
  350. data/lib/mtncloud/cli/commands/provisioning_licenses_command.rb +509 -0
  351. data/lib/mtncloud/cli/commands/provisioning_settings_command.rb +238 -0
  352. data/lib/mtncloud/cli/commands/recent_activity_command.rb +171 -0
  353. data/lib/mtncloud/cli/commands/remote.rb +1818 -0
  354. data/lib/mtncloud/cli/commands/reports_command.rb +724 -0
  355. data/lib/mtncloud/cli/commands/resource_pool_groups_command.rb +586 -0
  356. data/lib/mtncloud/cli/commands/rm_command.rb +14 -0
  357. data/lib/mtncloud/cli/commands/roles.rb +3120 -0
  358. data/lib/mtncloud/cli/commands/scale_thresholds.rb +103 -0
  359. data/lib/mtncloud/cli/commands/search_command.rb +184 -0
  360. data/lib/mtncloud/cli/commands/security_group_rules.rb +230 -0
  361. data/lib/mtncloud/cli/commands/security_groups.rb +1294 -0
  362. data/lib/mtncloud/cli/commands/security_package_types.rb +32 -0
  363. data/lib/mtncloud/cli/commands/security_packages.rb +84 -0
  364. data/lib/mtncloud/cli/commands/security_scans.rb +107 -0
  365. data/lib/mtncloud/cli/commands/self_service_command.rb +17 -0
  366. data/lib/mtncloud/cli/commands/server_devices_command.rb +207 -0
  367. data/lib/mtncloud/cli/commands/service_catalog_command.rb +1528 -0
  368. data/lib/mtncloud/cli/commands/service_plans_command.rb +895 -0
  369. data/lib/mtncloud/cli/commands/set_prompt_command.rb +51 -0
  370. data/lib/mtncloud/cli/commands/setup.rb +423 -0
  371. data/lib/mtncloud/cli/commands/shell.rb +717 -0
  372. data/lib/mtncloud/cli/commands/sleep_command.rb +43 -0
  373. data/lib/mtncloud/cli/commands/snapshots.rb +156 -0
  374. data/lib/mtncloud/cli/commands/source_command.rb +30 -0
  375. data/lib/mtncloud/cli/commands/ssl_verification_command.rb +47 -0
  376. data/lib/mtncloud/cli/commands/storage_datastores.rb +457 -0
  377. data/lib/mtncloud/cli/commands/storage_providers_command.rb +1401 -0
  378. data/lib/mtncloud/cli/commands/storage_server_types.rb +45 -0
  379. data/lib/mtncloud/cli/commands/storage_servers.rb +116 -0
  380. data/lib/mtncloud/cli/commands/storage_volume_types.rb +45 -0
  381. data/lib/mtncloud/cli/commands/storage_volumes.rb +236 -0
  382. data/lib/mtncloud/cli/commands/subnets_command.rb +819 -0
  383. data/lib/mtncloud/cli/commands/support_bundles_command.rb +606 -0
  384. data/lib/mtncloud/cli/commands/systems.rb +1203 -0
  385. data/lib/mtncloud/cli/commands/tasks.rb +1391 -0
  386. data/lib/mtncloud/cli/commands/tee_command.rb +14 -0
  387. data/lib/mtncloud/cli/commands/tenants_command.rb +315 -0
  388. data/lib/mtncloud/cli/commands/tokens_command.rb +391 -0
  389. data/lib/mtncloud/cli/commands/update_command.rb +46 -0
  390. data/lib/mtncloud/cli/commands/usage_command.rb +203 -0
  391. data/lib/mtncloud/cli/commands/user_groups_command.rb +512 -0
  392. data/lib/mtncloud/cli/commands/user_settings_command.rb +849 -0
  393. data/lib/mtncloud/cli/commands/user_sources_command.rb +1065 -0
  394. data/lib/mtncloud/cli/commands/users.rb +897 -0
  395. data/lib/mtncloud/cli/commands/vdi_allocations_command.rb +159 -0
  396. data/lib/mtncloud/cli/commands/vdi_apps_command.rb +317 -0
  397. data/lib/mtncloud/cli/commands/vdi_command.rb +359 -0
  398. data/lib/mtncloud/cli/commands/vdi_gateways_command.rb +290 -0
  399. data/lib/mtncloud/cli/commands/vdi_pools_command.rb +574 -0
  400. data/lib/mtncloud/cli/commands/version_command.rb +38 -0
  401. data/lib/mtncloud/cli/commands/view.rb +107 -0
  402. data/lib/mtncloud/cli/commands/virtual_images.rb +1362 -0
  403. data/lib/mtncloud/cli/commands/virtual_switches_command.rb +336 -0
  404. data/lib/mtncloud/cli/commands/whitelabel_settings_command.rb +653 -0
  405. data/lib/mtncloud/cli/commands/whoami.rb +323 -0
  406. data/lib/mtncloud/cli/commands/wiki_command.rb +448 -0
  407. data/lib/mtncloud/cli/commands/workflows.rb +1022 -0
  408. data/lib/mtncloud/cli/credentials.rb +482 -0
  409. data/lib/mtncloud/cli/dot_file.rb +180 -0
  410. data/lib/mtncloud/cli/error_handler.rb +307 -0
  411. data/lib/mtncloud/cli/errors.rb +53 -0
  412. data/lib/mtncloud/cli/expression_parser.rb +153 -0
  413. data/lib/mtncloud/cli/mixins/accounts_helper.rb +484 -0
  414. data/lib/mtncloud/cli/mixins/affinity_helper.rb +118 -0
  415. data/lib/mtncloud/cli/mixins/backups_helper.rb +200 -0
  416. data/lib/mtncloud/cli/mixins/deployments_helper.rb +163 -0
  417. data/lib/mtncloud/cli/mixins/execution_request_helper.rb +50 -0
  418. data/lib/mtncloud/cli/mixins/infrastructure_helper.rb +966 -0
  419. data/lib/mtncloud/cli/mixins/jobs_helper.rb +202 -0
  420. data/lib/mtncloud/cli/mixins/library_helper.rb +539 -0
  421. data/lib/mtncloud/cli/mixins/load_balancers_helper.rb +176 -0
  422. data/lib/mtncloud/cli/mixins/logs_helper.rb +131 -0
  423. data/lib/mtncloud/cli/mixins/monitoring_helper.rb +876 -0
  424. data/lib/mtncloud/cli/mixins/networks_helper.rb +62 -0
  425. data/lib/mtncloud/cli/mixins/operations_helper.rb +41 -0
  426. data/lib/mtncloud/cli/mixins/option_source_helper.rb +254 -0
  427. data/lib/mtncloud/cli/mixins/print_helper.rb +1631 -0
  428. data/lib/mtncloud/cli/mixins/processes_helper.rb +286 -0
  429. data/lib/mtncloud/cli/mixins/prompt_helper.rb +136 -0
  430. data/lib/mtncloud/cli/mixins/provisioning_helper.rb +2963 -0
  431. data/lib/mtncloud/cli/mixins/remote_helper.rb +139 -0
  432. data/lib/mtncloud/cli/mixins/rest_command.rb +994 -0
  433. data/lib/mtncloud/cli/mixins/secondary_rest_command.rb +700 -0
  434. data/lib/mtncloud/cli/mixins/storage_servers_helper.rb +93 -0
  435. data/lib/mtncloud/cli/mixins/storage_volumes_helper.rb +76 -0
  436. data/lib/mtncloud/cli/mixins/vdi_helper.rb +246 -0
  437. data/lib/mtncloud/cli/mixins/whoami_helper.rb +73 -0
  438. data/lib/mtncloud/cli/option_parser.rb +127 -0
  439. data/lib/mtncloud/cli/option_types.rb +1622 -0
  440. data/lib/mtncloud/cli/version.rb +6 -0
  441. data/lib/mtncloud/cli.rb +105 -0
  442. data/lib/mtncloud/currency.rb +184 -0
  443. data/lib/mtncloud/ext/hash.rb +109 -0
  444. data/lib/mtncloud/ext/nil_class.rb +5 -0
  445. data/lib/mtncloud/ext/rest_client.rb +37 -0
  446. data/lib/mtncloud/ext/string.rb +66 -0
  447. data/lib/mtncloud/formatters.rb +511 -0
  448. data/lib/mtncloud/logging.rb +185 -0
  449. data/lib/mtncloud/morpkg.rb +119 -0
  450. data/lib/mtncloud/rest_client.rb +104 -0
  451. data/lib/mtncloud/routes.rb +304 -0
  452. data/lib/mtncloud/terminal.rb +528 -0
  453. data/lib/mtncloud/util.rb +29 -0
  454. data/lib/mtncloud.rb +5 -0
  455. data/mtncloud-cli.gemspec +38 -0
  456. data/test/api/affinity_groups_interface_test.rb +43 -0
  457. data/test/api/clients_interface_test.rb +23 -0
  458. data/test/api/clouds_interface_test.rb +67 -0
  459. data/test/api/containers_interface_test.rb +68 -0
  460. data/test/api/host_vm_groups_interface_test.rb +35 -0
  461. data/test/api/instances_interface_test.rb +22 -0
  462. data/test/api/network_routers_interface_test.rb +22 -0
  463. data/test/api/systems_interface_test.rb +26 -0
  464. data/test/api/whoami_interface_test.rb +14 -0
  465. data/test/branding_test.rb +160 -0
  466. data/test/cli/access_token_test.rb +36 -0
  467. data/test/cli/affinity_groups_cloud_cluster_scope_test.rb +270 -0
  468. data/test/cli/affinity_groups_cluster_scope_test.rb +171 -0
  469. data/test/cli/affinity_groups_test.rb +57 -0
  470. data/test/cli/affinity_groups_violations_scope_test.rb +141 -0
  471. data/test/cli/affinity_helper_test.rb +367 -0
  472. data/test/cli/auth_test.rb +88 -0
  473. data/test/cli/backups_test.rb +212 -0
  474. data/test/cli/cli_test.rb +48 -0
  475. data/test/cli/clients_test.rb +45 -0
  476. data/test/cli/clusters_uuid_test.rb +146 -0
  477. data/test/cli/containers_test.rb +92 -0
  478. data/test/cli/distributed_workers_test.rb +68 -0
  479. data/test/cli/help_test.rb +25 -0
  480. data/test/cli/host_vm_groups_cluster_scope_test.rb +187 -0
  481. data/test/cli/host_vm_groups_test.rb +63 -0
  482. data/test/cli/infrastructure_helper_cluster_resolver_test.rb +250 -0
  483. data/test/cli/instances_test.rb +37 -0
  484. data/test/cli/man_test.rb +14 -0
  485. data/test/cli/migrations_test.rb +39 -0
  486. data/test/cli/network_routers_test.rb +65 -0
  487. data/test/cli/remote_test.rb +89 -0
  488. data/test/cli/roles_test.rb +47 -0
  489. data/test/cli/shell_test.rb +81 -0
  490. data/test/cli/storage_volumes_test.rb +79 -0
  491. data/test/cli/systems_test.rb +206 -0
  492. data/test/cli/version_test.rb +23 -0
  493. data/test/cli/view_test.rb +55 -0
  494. data/test/cli/whoami_test.rb +17 -0
  495. data/test/mtncloud_test.rb +16 -0
  496. data/test/test_case.rb +342 -0
  497. data/test/test_config.rb +137 -0
  498. data/test/test_data_helper.rb +97 -0
  499. metadata +807 -0
@@ -0,0 +1,791 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::MonitoringAlertsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::MonitoringHelper
6
+
7
+ set_command_name :'monitor-alerts'
8
+
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+
11
+ def initialize()
12
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
13
+ end
14
+
15
+ def connect(opts)
16
+ @api_client = establish_remote_appliance_connection(opts)
17
+ @monitoring_interface = @api_client.monitoring
18
+ @monitoring_alerts_interface = @api_client.monitoring.alerts
19
+ @monitoring_checks_interface = @api_client.monitoring.checks
20
+ @monitoring_groups_interface = @api_client.monitoring.groups
21
+ @monitoring_apps_interface = @api_client.monitoring.apps
22
+ @monitoring_contacts_interface = @api_client.monitoring.contacts
23
+ end
24
+
25
+ def handle(args)
26
+ handle_subcommand(args)
27
+ end
28
+
29
+ def list(args)
30
+ options = {}
31
+ params = {}
32
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
33
+ opts.banner = subcommand_usage()
34
+ build_common_options(opts, options, [:list, :last_updated, :query, :json, :csv, :yaml, :fields, :json, :dry_run, :remote])
35
+ opts.footer = "List monitoring alert rules."
36
+ end
37
+ optparse.parse!(args)
38
+ connect(options)
39
+ begin
40
+ params.merge!(parse_list_options(options))
41
+ # JD: lastUpdated 500ing, alerts don't have that property ? =o Fix it!
42
+ @monitoring_alerts_interface.setopts(options)
43
+ if options[:dry_run]
44
+ print_dry_run @monitoring_alerts_interface.dry.list(params)
45
+ return
46
+ end
47
+
48
+ json_response = @monitoring_alerts_interface.list(params)
49
+ if options[:json]
50
+ puts as_json(json_response, options, "alerts")
51
+ return 0
52
+ elsif options[:yaml]
53
+ puts as_json(json_response, options, "alerts")
54
+ return 0
55
+ elsif options[:csv]
56
+ puts records_as_csv(json_response['alerts'], options)
57
+ return 0
58
+ end
59
+ alerts = json_response['alerts']
60
+ title = "Monitoring Alerts"
61
+ subtitles = []
62
+ subtitles += parse_list_subtitles(options)
63
+ print_h1 title, subtitles, options
64
+ if alerts.empty?
65
+ print cyan,"No alerts found.",reset,"\n"
66
+ else
67
+ print_alerts_table(alerts, options)
68
+ print_results_pagination(json_response, {:label => "alert", :n_label => "alerts"})
69
+ end
70
+ print reset,"\n"
71
+ rescue RestClient::Exception => e
72
+ print_rest_exception(e, options)
73
+ exit 1
74
+ end
75
+ end
76
+
77
+ def get(args)
78
+ options = {}
79
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
80
+ opts.banner = subcommand_usage("[alert]")
81
+ # opts.on(nil,'--history', "Display History") do |val|
82
+ # options[:show_history] = true
83
+ # end
84
+ # opts.on(nil,'--notifications', "Display Notifications") do |val|
85
+ # options[:show_notifications] = true
86
+ # end
87
+ build_common_options(opts, options, [:json, :csv, :fields, :dry_run, :remote])
88
+ opts.footer = "Get details about a monitoring alert rule." + "\n" +
89
+ "[alert] is required. This is the name or ID of the alert rule. Supports 1-N [alert] arguments."
90
+ end
91
+ optparse.parse!(args)
92
+ if args.count < 1
93
+ raise_command_error "wrong number of arguments, expected 1-N and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
94
+ end
95
+ connect(options)
96
+ id_list = parse_id_list(args)
97
+ return run_command_for_each_arg(id_list) do |arg|
98
+ _get(arg, options)
99
+ end
100
+ end
101
+
102
+ def _get(id, options)
103
+
104
+ begin
105
+ alert = find_alert_by_name_or_id(id)
106
+ @monitoring_alerts_interface.setopts(options)
107
+ if options[:dry_run]
108
+ print_dry_run @monitoring_alerts_interface.dry.get(alert['id'])
109
+ return
110
+ end
111
+ # get by ID to sideload associated checks,groups,apps
112
+ json_response = @monitoring_alerts_interface.get(alert['id'])
113
+ alert = json_response['alert']
114
+ if options[:json]
115
+ puts as_json(json_response, options, "alert")
116
+ return 0
117
+ elsif options[:yaml]
118
+ puts as_yaml(json_response, options, "alert")
119
+ return 0
120
+ elsif options[:csv]
121
+ puts records_as_csv([json_response['alert']], options)
122
+ return 0
123
+ end
124
+
125
+ print_h1 "Alert Details"
126
+ print cyan
127
+ description_cols = {
128
+ "ID" => 'id',
129
+ "Name" => 'name',
130
+ "Min. Severity" => "minSeverity",
131
+ "Min. Duration" => lambda {|alert| alert['minDuration'] && alert['minDuration'].to_i > 0 ? "#{alert['minDuration']} minutes" : "0 (immediate)" },
132
+ "Checks" => lambda {|alert|
133
+ if alert['allChecks']
134
+ "All"
135
+ else
136
+ checks = alert['checks'] || []
137
+ # if checks.size > 3
138
+ # checks.first(3).collect {|r| r['name'] }.join(", ") + ", (#{checks.size - 3} more)"
139
+ # else
140
+ # checks.collect {|r| r['name'] }.join(", ")
141
+ # end
142
+ checks.size.to_s
143
+ end
144
+ },
145
+ "Groups" => lambda {|alert|
146
+ if alert['allGroups']
147
+ "All"
148
+ else
149
+ check_groups = alert['checkGroups'] || []
150
+ # if check_groups.size > 3
151
+ # check_groups.first(3).collect {|r| r['name'] }.join(", ") + ", (#{check_groups.size - 3} more)"
152
+ # else
153
+ # check_groups.collect {|r| r['name'] }.join(", ")
154
+ # end
155
+ check_groups.size.to_s
156
+ end
157
+ },
158
+ "Apps" => lambda {|alert|
159
+ if alert['allApps']
160
+ "All"
161
+ else
162
+ monitor_apps = alert['apps'] || []
163
+ # if monitor_apps.size > 3
164
+ # monitor_apps.first(3).collect {|r| r['name'] }.join(", ") + ", (#{monitor_apps.size - 3} more)"
165
+ # else
166
+ # monitor_apps.collect {|r| r['name'] }.join(", ")
167
+ # end
168
+ monitor_apps.size.to_s
169
+ end
170
+ },
171
+ "Contacts" => lambda {|alert|
172
+ recipients = alert['contacts'] || alert['recipients'] || []
173
+ # if recipients.size > 3
174
+ # recipients.first(3).collect {|r| r['name'] }.join(", ") + ", (#{recipients.size - 3} more)"
175
+ # else
176
+ # recipients.collect {|r| r['name'] }.join(", ")
177
+ # end
178
+ recipients.size.to_s
179
+ },
180
+ "Created" => lambda {|alert| format_local_dt(alert['dateCreated']) },
181
+ "Updated" => lambda {|alert| format_local_dt(alert['lastUpdated']) },
182
+ }
183
+ print as_description_list(alert, description_cols)
184
+
185
+
186
+
187
+ ## Checks in this Alert
188
+ #checks = alert["checks"]
189
+ checks = json_response["checks"]
190
+ if checks && !checks.empty?
191
+ print_h2 "Checks"
192
+ print_checks_table(checks, options)
193
+ end
194
+
195
+ ## Check Groups in this Alert
196
+ # check_groups = alert["checkGroups"]
197
+ check_groups = json_response["checkGroups"]
198
+ if check_groups && !check_groups.empty?
199
+ print_h2 "Check Groups"
200
+ print_check_groups_table(check_groups, options)
201
+ end
202
+
203
+ ## Apps in this Alert
204
+ monitor_apps = alert["apps"]
205
+ monitor_apps = json_response["apps"]
206
+ if monitor_apps && !monitor_apps.empty?
207
+ print_h2 "Apps"
208
+ print_monitoring_apps_table(monitor_apps, options)
209
+ end
210
+
211
+ ## Recipients in this Alert
212
+ recipients = alert['contacts'] || alert['recipients'] || []
213
+ if recipients && !recipients.empty?
214
+ print_h2 "Contacts"
215
+ columns = [
216
+ {"CONTACT ID" => lambda {|recipient| recipient['id'] } },
217
+ {"CONTACT NAME" => lambda {|recipient| recipient['name'] } },
218
+ {"METHOD" => lambda {|recipient| format_recipient_method(recipient['method'] || recipient['addressTypes']) } },
219
+ {"NOTIFY ON CHANGE" => lambda {|recipient| format_boolean(recipient['notify']) } },
220
+ {"NOTIFY ON CLOSE" => lambda {|recipient| format_boolean(recipient['close']) } }
221
+ ]
222
+ print as_pretty_table(recipients, columns)
223
+ end
224
+
225
+ # show Notify events here...
226
+
227
+ print reset, "\n"
228
+ return 0
229
+ rescue RestClient::Exception => e
230
+ print_rest_exception(e, options)
231
+ exit 1
232
+ end
233
+ end
234
+
235
+ def add(args)
236
+ options = {}
237
+ params = {}
238
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
239
+ opts.banner = subcommand_usage("[name]")
240
+ opts.on("--name STRING", String, "Alert name") do |val|
241
+ params['name'] = val
242
+ end
243
+ opts.on('--min-severity VALUE', String, "Min. Severity. Trigger when severity level is reached. Default is critical") do |val|
244
+ params['minSeverity'] = val.to_s.downcase
245
+ end
246
+ opts.on('--min-duration MINUTES', String, "Min. Duration. Trigger after a number of minutes. Default is 0 (immediate)") do |val|
247
+ params['minDuration'] = val.to_i
248
+ end
249
+ opts.on('--all-checks [on|off]', String, "Toggle trigger for all checks.") do |val|
250
+ params['allChecks'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
251
+ end
252
+ opts.on('--checks LIST', Array, "Checks, comma separated list of names or IDs.") do |list|
253
+ if list.size == 1 && ('[]' == list[0]) # clear array
254
+ params['checks'] = []
255
+ else
256
+ params['checks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
257
+ end
258
+ end
259
+ opts.on('--all-groups [on|off]', String, "Toggle trigger for all check groups.") do |val|
260
+ params['allGroups'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
261
+ end
262
+ opts.on('--groups LIST', Array, "Check Groups, comma separated list of names or IDs.") do |list|
263
+ if list.size == 1 && ('[]' == list[0]) # clear array
264
+ params['checkGroups'] = []
265
+ else
266
+ params['checkGroups'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
267
+ end
268
+ end
269
+ opts.on('--all-apps [on|off]', String, "Toggle trigger for all check groups.") do |val|
270
+ params['allApps'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
271
+ end
272
+ opts.on('--apps LIST', Array, "Monitor Apps, comma separated list of names or IDs.") do |list|
273
+ if list.size == 1 && ('[]' == list[0]) # clear array
274
+ params['apps'] = []
275
+ else
276
+ params['apps'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
277
+ end
278
+ end
279
+ opts.on('--contacts LIST', Array, "Contacts, comma separated list of Contact names or IDs. Additional recipient settings can be passed like Contact ID:method:notifyOnClose:notifyOnChange.") do |list|
280
+ if list.size == 1 && ('[]' == list[0]) # clear array
281
+ params['contacts'] = []
282
+ else
283
+ recipient_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
284
+ params['contacts'] = recipient_list
285
+ end
286
+ end
287
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
288
+ opts.footer = "Create a monitoring alert rule." + "\n" +
289
+ "[name] is required. This is the name of the new alert rule."
290
+ end
291
+ optparse.parse!(args)
292
+ if args.count > 1
293
+ raise_command_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
294
+ end
295
+ if args[0]
296
+ params['name'] = args[0]
297
+ end
298
+ connect(options)
299
+
300
+ begin
301
+
302
+ # construct payload
303
+ payload = nil
304
+ if options[:payload]
305
+ payload = options[:payload]
306
+ else
307
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
308
+ if params['name'].nil?
309
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true, 'description' => 'The name of this alert rule.'}], options[:options])
310
+ params['name'] = v_prompt['name']
311
+ end
312
+ if params['minSeverity'].nil?
313
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'minSeverity', 'type' => 'text', 'fieldLabel' => 'Min. Severity', 'required' => false, 'selectOptions' => available_severities, 'defaultValue' => 'critical', 'description' => 'Trigger when severity level is reached.'}], options[:options])
314
+ params['minSeverity'] = v_prompt['minSeverity'].to_s unless v_prompt['minSeverity'].nil?
315
+ end
316
+ if params['minDuration'].nil?
317
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'minDuration', 'type' => 'text', 'fieldLabel' => 'Min. Duration', 'required' => false, 'defaultValue' => '0', 'description' => 'Trigger after a number of minutes.'}], options[:options])
318
+ params['minDuration'] = v_prompt['minDuration'].to_i unless v_prompt['minDuration'].nil?
319
+ end
320
+ # All Checks?
321
+ if params['allChecks'].nil?
322
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allChecks', 'type' => 'text', 'fieldLabel' => 'All Checks?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all checks.'}], options[:options])
323
+ params['allChecks'] = (['on','true'].include?(v_prompt['allChecks'].to_s)) unless v_prompt['allChecks'].nil?
324
+ end
325
+ # Checks
326
+ if params['allChecks'] == true
327
+ params.delete('checks')
328
+ else
329
+ prompt_results = prompt_for_checks(params, options, @api_client)
330
+ if prompt_results[:success]
331
+ params['checks'] = prompt_results[:data] unless prompt_results[:data].nil?
332
+ else
333
+ return 1
334
+ end
335
+ end
336
+
337
+ # All Check Groups?
338
+ if params['allGroups'].nil?
339
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allGroups', 'type' => 'text', 'fieldLabel' => 'All Groups?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all check groups.'}], options[:options])
340
+ params['allGroups'] = (['on','true'].include?(v_prompt['allGroups'].to_s)) unless v_prompt['allGroups'].nil?
341
+ end
342
+ # Check Groups
343
+ if params['allGroups'] == true
344
+ params.delete('checkGroups')
345
+ else
346
+ prompt_results = prompt_for_check_groups(params, options, @api_client)
347
+ if prompt_results[:success]
348
+ params['checkGroups'] = prompt_results[:data] unless prompt_results[:data].nil?
349
+ else
350
+ return 1
351
+ end
352
+ end
353
+
354
+ # All Apps?
355
+ if params['allApps'].nil?
356
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allApps', 'type' => 'text', 'fieldLabel' => 'All Apps?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all monitoring apps.'}], options[:options])
357
+ params['allApps'] = (['on','true'].include?(v_prompt['allApps'].to_s)) unless v_prompt['allApps'].nil?
358
+ end
359
+ # Apps
360
+ if params['allApps'] == true
361
+ params.delete('apps')
362
+ else
363
+ prompt_results = prompt_for_monitor_apps(params, options, @api_client)
364
+ if prompt_results[:success]
365
+ params['apps'] = prompt_results[:data] unless prompt_results[:data].nil?
366
+ else
367
+ return 1
368
+ end
369
+ end
370
+
371
+ # Recipients (Contacts)
372
+ recipient_list = []
373
+ contact_ids = []
374
+
375
+ if params['contacts'].nil?
376
+ still_prompting = true
377
+ while still_prompting
378
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'contacts', 'type' => 'text', 'fieldLabel' => 'Contacts', 'required' => false, 'description' => "Contacts, comma separated list of contact names or IDs. Additional recipient settings can be passed like Contact ID:method:notifyOnClose:notifyOnChange"}], options[:options])
379
+ unless v_prompt['contacts'].to_s.empty?
380
+ recipient_list = v_prompt['contacts'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
381
+ end
382
+ bad_ids = []
383
+ if recipient_list && recipient_list.size > 0
384
+ recipient_list.each do |it|
385
+ found_contact = nil
386
+ begin
387
+ parts = it.split(":").collect { |part| part.strip }
388
+ found_contact = find_contact_by_name_or_id(parts[0])
389
+ rescue SystemExit => cmdexit
390
+ end
391
+ if found_contact
392
+ contact_ids << found_contact['id']
393
+ else
394
+ bad_ids << it
395
+ end
396
+ end
397
+ end
398
+ still_prompting = bad_ids.empty? ? false : true
399
+ end
400
+ else
401
+ recipient_list = params['contacts']
402
+ bad_ids = []
403
+ if recipient_list && recipient_list.size > 0
404
+ recipient_list.each do |it|
405
+ found_contact = nil
406
+ begin
407
+ parts = it.split(":").collect { |part| part.strip }
408
+ found_contact = find_contact_by_name_or_id(parts[0])
409
+ rescue SystemExit => cmdexit
410
+ end
411
+ if found_contact
412
+ contact_ids << found_contact['id']
413
+ else
414
+ bad_ids << it
415
+ end
416
+ end
417
+ end
418
+ if !bad_ids.empty?
419
+ return 1
420
+ end
421
+ end
422
+ recipient_records = []
423
+ # parse recipient string as Contact ID:method:notifyOnClose:notifyOnChange
424
+ recipient_list.each_with_index do |it, index|
425
+ parts = it.split(":").collect { |part| part.strip }
426
+ #recipient_id = parts[0]
427
+ recipient_id = contact_ids[index]
428
+
429
+ recipient_method = parts[1] ? parts[1].to_s : "emailAddress"
430
+ recipient_notify = parts[2] ? ['on','true'].include?(parts[2].to_s.downcase) : true
431
+ recipient_close = parts[3] ? ['on','true'].include?(parts[3].to_s.downcase) : true
432
+ recipient_record = {
433
+ "id" => recipient_id,
434
+ "method" => parse_recipient_method(recipient_method),
435
+ "notify" => recipient_notify,
436
+ "close" => recipient_close
437
+ }
438
+ recipient_records << recipient_record
439
+ end
440
+ params['contacts'] = recipient_records
441
+
442
+ payload = {'alert' => params}
443
+ end
444
+
445
+ @monitoring_alerts_interface.setopts(options)
446
+ if options[:dry_run]
447
+ print_dry_run @monitoring_alerts_interface.dry.create(payload)
448
+ return
449
+ end
450
+
451
+ json_response = @monitoring_alerts_interface.create(payload)
452
+ alert = json_response['alert']
453
+ if options[:json]
454
+ puts as_json(json_response, options)
455
+ elsif !options[:quiet]
456
+ print_green_success "Created alert (#{alert['id']}) #{alert['name']}"
457
+ #_get(alert['id'], options)
458
+ end
459
+
460
+ rescue RestClient::Exception => e
461
+ print_rest_exception(e, options)
462
+ exit 1
463
+ end
464
+ end
465
+
466
+ def update(args)
467
+ options = {}
468
+ params = {}
469
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
470
+ opts.banner = subcommand_usage("[alert]")
471
+ opts.on("--name STRING", String, "Alert name") do |val|
472
+ params['name'] = val
473
+ end
474
+ opts.on("--name STRING", String, "Alert name") do |val|
475
+ params['name'] = val
476
+ end
477
+ opts.on('--min-severity VALUE', String, "Min. Severity. Trigger when severity level is reached. Default is critical") do |val|
478
+ params['minSeverity'] = val.to_s.downcase
479
+ end
480
+ opts.on('--min-duration MINUTES', String, "Min. Duration. Trigger after a number of minutes. Default is 0 (immediate)") do |val|
481
+ params['minDuration'] = val.to_i
482
+ end
483
+ opts.on('--all-checks [on|off]', String, "Toggle trigger for all checks.") do |val|
484
+ params['allChecks'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
485
+ end
486
+ opts.on('--checks LIST', Array, "Checks, comma separated list of names or IDs.") do |list|
487
+ if list.size == 1 && ('[]' == list[0]) # clear array
488
+ params['checks'] = []
489
+ else
490
+ params['checks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
491
+ end
492
+ end
493
+ opts.on('--all-groups [on|off]', String, "Toggle trigger for all check groups.") do |val|
494
+ params['allGroups'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
495
+ end
496
+ opts.on('--groups LIST', Array, "Check Groups, comma separated list of check group ID or names.") do |list|
497
+ if list.size == 1 && ('[]' == list[0]) # clear array
498
+ params['checkGroups'] = []
499
+ else
500
+ params['checkGroups'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
501
+ end
502
+ end
503
+ opts.on('--all-apps [on|off]', String, "Toggle trigger for all check groups.") do |val|
504
+ params['allApps'] = val.to_s == 'on' || val.to_s == 'true' || val == '' || val.nil?
505
+ end
506
+ opts.on('--apps LIST', Array, "Monitor Apps, comma separated list of monitor app ID or names.") do |list|
507
+ if list.size == 1 && ('[]' == list[0]) # clear array
508
+ params['apps'] = []
509
+ else
510
+ params['apps'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
511
+ end
512
+ end
513
+ opts.on('--contacts LIST', Array, "Contacts, comma separated list of contact ID or names. Additional recipient settings can be passed like Contact ID:method:notifyOnClose:notifyOnChange") do |list|
514
+ if list.size == 1 && ('[]' == list[0]) # clear array
515
+ params['contacts'] = []
516
+ else
517
+ recipient_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
518
+ params['contacts'] = recipient_list
519
+ end
520
+ end
521
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
522
+ opts.footer = "Update a monitoring alert rule." + "\n" +
523
+ "[alert] is required. This is the name or ID of the alert rule."
524
+ end
525
+ optparse.parse!(args)
526
+ if args.count != 1
527
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
528
+ end
529
+ connect(options)
530
+
531
+ begin
532
+ alert = find_alert_by_name_or_id(args[0])
533
+
534
+ # construct payload
535
+ payload = nil
536
+ if options[:payload]
537
+ payload = options[:payload]
538
+ else
539
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
540
+ # if params['name'].nil?
541
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true, 'description' => 'The name of this alert rule.'}], options[:options])
542
+ # params['name'] = v_prompt['name']
543
+ # end
544
+ # if params['minSeverity'].nil?
545
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'minSeverity', 'type' => 'text', 'fieldLabel' => 'Min. Severity', 'required' => false, 'selectOptions' => available_severities, 'defaultValue' => 'critical', 'description' => 'Trigger when severity level is reached.'}], options[:options])
546
+ # params['minSeverity'] = v_prompt['minSeverity'].to_s unless v_prompt['minSeverity'].nil?
547
+ # end
548
+ # if params['minDuration'].nil?
549
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'minDuration', 'type' => 'text', 'fieldLabel' => 'Min. Duration', 'required' => false, 'defaultValue' => '0', 'description' => 'Trigger after a number of minutes.'}], options[:options])
550
+ # params['minDuration'] = v_prompt['minDuration'].to_i unless v_prompt['minDuration'].nil?
551
+ # end
552
+ # All Checks?
553
+ # if params['allChecks'].nil?
554
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allChecks', 'type' => 'text', 'fieldLabel' => 'All Checks?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all checks.'}], options[:options])
555
+ # params['allChecks'] = (['on','true'].include?(v_prompt['allChecks'].to_s)) unless v_prompt['allChecks'].nil?
556
+ # end
557
+ # Checks
558
+ if params['checks']
559
+ prompt_results = prompt_for_checks(params, options, @api_client)
560
+ if prompt_results[:success]
561
+ params['checks'] = prompt_results[:data] unless prompt_results[:data].nil?
562
+ else
563
+ return 1
564
+ end
565
+ end
566
+
567
+ # All Check Groups?
568
+ # if params['allGroups'].nil?
569
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allGroups', 'type' => 'text', 'fieldLabel' => 'All Groups?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all check groups.'}], options[:options])
570
+ # params['allGroups'] = (['on','true'].include?(v_prompt['allGroups'].to_s)) unless v_prompt['allGroups'].nil?
571
+ # end
572
+ # Check Groups
573
+ if params['checkGroups']
574
+ prompt_results = prompt_for_check_groups(params, options, @api_client)
575
+ if prompt_results[:success]
576
+ params['checkGroups'] = prompt_results[:data] unless prompt_results[:data].nil?
577
+ else
578
+ return 1
579
+ end
580
+ end
581
+
582
+ # All Apps?
583
+ # if params['allApps'].nil?
584
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'allApps', 'type' => 'text', 'fieldLabel' => 'All Apps?', 'required' => false, 'defaultValue' => 'off', 'description' => 'Trigger for all monitoring apps.'}], options[:options])
585
+ # params['allApps'] = (['on','true'].include?(v_prompt['allApps'].to_s)) unless v_prompt['allApps'].nil?
586
+ # end
587
+ # Apps
588
+ if params['apps']
589
+ prompt_results = prompt_for_monitor_apps(params, options, @api_client)
590
+ if prompt_results[:success]
591
+ params['apps'] = prompt_results[:data] unless prompt_results[:data].nil?
592
+ else
593
+ return 1
594
+ end
595
+ end
596
+
597
+ # Recipients (Contacts)
598
+ if params['contacts']
599
+
600
+ recipient_list = params['contacts']
601
+ contact_ids = []
602
+ bad_ids = []
603
+ if recipient_list && recipient_list.size > 0
604
+ recipient_list.each do |it|
605
+ found_contact = nil
606
+ begin
607
+ parts = it.split(":").collect { |part| part.strip }
608
+ found_contact = find_contact_by_name_or_id(parts[0])
609
+ rescue SystemExit => cmdexit
610
+ end
611
+ if found_contact
612
+ contact_ids << found_contact['id']
613
+ else
614
+ bad_ids << it
615
+ end
616
+ end
617
+ end
618
+ if !bad_ids.empty?
619
+ return 1
620
+ end
621
+ recipient_records = []
622
+ # parse recipient string as Contact ID:method:notifyOnClose:notifyOnChange
623
+ existing_recipients = alert['contacts'] || []
624
+ recipient_list.each_with_index do |it, index|
625
+ parts = it.split(":").collect { |part| part.strip }
626
+ #recipient_id = parts[0]
627
+ recipient_id = contact_ids[index]
628
+ recipient_record = {
629
+ "id" => recipient_id
630
+ }
631
+ # preserve existing values for these settings
632
+ existing_recipient = existing_recipients.find {|rec| rec['id'] == recipient_id.to_i }
633
+ if parts[1]
634
+ recipient_record["method"] = parse_recipient_method(parts[1].to_s)
635
+ elsif existing_recipient
636
+ recipient_record["method"] = existing_recipient["method"]
637
+ end
638
+ if parts[2]
639
+ recipient_record["notify"] = ['on','true'].include?(parts[2].to_s.downcase)
640
+ elsif existing_recipient
641
+ recipient_record["notify"] = existing_recipient["notify"]
642
+ end
643
+ if parts[3]
644
+ recipient_record["close"] = ['on','true'].include?(parts[3].to_s.downcase)
645
+ elsif existing_recipient
646
+ recipient_record["close"] = existing_recipient["close"]
647
+ end
648
+ recipient_records << recipient_record
649
+ end
650
+ params['contacts'] = recipient_records
651
+ end
652
+
653
+ payload = {'alert' => params}
654
+ end
655
+
656
+ if params.empty?
657
+ print_red_alert "Specify at least one option to update"
658
+ puts optparse
659
+ exit 1
660
+ end
661
+
662
+ @monitoring_alerts_interface.setopts(options)
663
+ if options[:dry_run]
664
+ print_dry_run @monitoring_alerts_interface.dry.update(alert["id"], payload)
665
+ return
666
+ end
667
+
668
+ json_response = @monitoring_alerts_interface.update(alert["id"], payload)
669
+ alert = json_response['alert']
670
+ if options[:json]
671
+ puts as_json(json_response, options)
672
+ elsif !options[:quiet]
673
+ print_green_success "Updated alert (#{alert['id']}) #{alert['name']}"
674
+ _get(alert['id'], options)
675
+ end
676
+
677
+ rescue RestClient::Exception => e
678
+ print_rest_exception(e, options)
679
+ exit 1
680
+ end
681
+ end
682
+
683
+
684
+ def remove(args)
685
+ options = {}
686
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
687
+ opts.banner = subcommand_usage("[alert]")
688
+ build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
689
+ opts.footer = "Delete a monitoring alert rule." + "\n" +
690
+ "[alert] is required. This is the name or ID of the alert rule. Supports 1-N [alert] arguments."
691
+ end
692
+ optparse.parse!(args)
693
+ if args.count < 1
694
+ raise_command_error "wrong number of arguments, expected 1-N and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
695
+ end
696
+ connect(options)
697
+ id_list = parse_id_list(args)
698
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to delete #{id_list.size == 1 ? 'alert' : 'alerts'} #{anded_list(id_list)}?", options)
699
+ exit 1
700
+ end
701
+ return run_command_for_each_arg(id_list) do |arg|
702
+ _remove(arg, options)
703
+ end
704
+ end
705
+
706
+ def _remove(id, options)
707
+
708
+ begin
709
+ alert = find_alert_by_name_or_id(id)
710
+ @monitoring_alerts_interface.setopts(options)
711
+ if options[:dry_run]
712
+ print_dry_run @monitoring_alerts_interface.dry.destroy(alert['id'])
713
+ return
714
+ end
715
+ json_response = @monitoring_alerts_interface.destroy(alert['id'])
716
+ if options[:json]
717
+ puts as_json(json_response, options)
718
+ elsif !options[:quiet]
719
+ print_green_success json_response["msg"] || "Alert (#{alert['id']}) #{alert['name']} deleted"
720
+ end
721
+ rescue RestClient::Exception => e
722
+ print_rest_exception(e, options)
723
+ exit 1
724
+ end
725
+ end
726
+
727
+ private
728
+
729
+ def print_alerts_table(alerts, options={})
730
+ columns = [
731
+ {"ID" => "id" },
732
+ {"NAME" => "name" },
733
+ {"APPS" => lambda {|alert|
734
+ if alert['allApps']
735
+ "All"
736
+ else
737
+ monitor_apps = alert['apps'] || []
738
+ # if monitor_apps.size > 3
739
+ # monitor_apps.first(3).collect {|r| r['name'] }.join(", ") + ", (#{monitor_apps.size - 3} more)"
740
+ # else
741
+ # monitor_apps.collect {|r| r['name'] }.join(", ")
742
+ # end
743
+ monitor_apps.size.to_s
744
+ end
745
+ } },
746
+ {"CHECKS" => lambda {|alert|
747
+ if alert['allChecks']
748
+ "All"
749
+ else
750
+ checks = alert['checks'] || []
751
+ # if checks.size > 3
752
+ # checks.first(3).collect {|r| r['name'] }.join(", ") + ", (#{checks.size - 3} more)"
753
+ # # checks.size.to_s
754
+ # else
755
+ # checks.collect {|r| r['name'] }.join(", ")
756
+ # end
757
+ checks.size.to_s
758
+ end
759
+ } },
760
+ {"GROUPS" => lambda {|alert|
761
+ if alert['allGroups']
762
+ "All"
763
+ else
764
+ check_groups = alert['checkGroups'] || []
765
+ # if check_groups.size > 3
766
+ # check_groups.first(3).collect {|r| r['name'] }.join(", ") + ", (#{check_groups.size - 3} more)"
767
+ # else
768
+ # check_groups.collect {|r| r['name'] }.join(", ")
769
+ # end
770
+ check_groups.size.to_s
771
+ end
772
+ } },
773
+ {"MIN. SEVERITY" => "minSeverity" },
774
+ {"CONTACTS" => lambda {|alert|
775
+ recipients = alert['contacts'] || alert['recipients'] || []
776
+ # if recipients.size > 3
777
+ # recipients.first(3).collect {|r| r['name'] }.join(", ") + ", (#{recipients.size - 3} more)"
778
+ # else
779
+ # recipients.collect {|r| r['name'] }.join(", ")
780
+ # end
781
+ recipients.size.to_s
782
+ } },
783
+ ]
784
+ if options[:include_fields]
785
+ columns = options[:include_fields]
786
+ end
787
+ print as_pretty_table(alerts, columns, options)
788
+ end
789
+
790
+
791
+ end