pattern { metadata { id = "b35af9d9e0dc421d856f123796214ea4" name = "RabbitMQ Queue" description = "" citype = "cmdb_ci_appl_rabbitmq_queue" } identification { name = "Identification section of RabbitMQ" entry_point {type = "cmdb_ci_endpoint_inclusion_rabbitmq_queue"} find_process_strategy {strategy = NONE} step { name = "Get Queues Windows" if { condition = eq { get_attr {"computer_system.osFamily"} "WINDOWS" } on_true = runcmd_to_var { cmd = concat { "\"" get_attr {"parent.install_directory"} "\\\\sbin\\\\rabbitmqctl.bat\" -p " get_attr {"entry_point.vhost"} " list_queues name pid slave_pids | findstr " get_attr {"parent.node_name"} } var_names = table { name = "QueueTable" col_names = "QueueName" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s.*"} if_not_found_do = nop {} cache_flag = 0 } on_false = nop {} } } step { name = "set sudo" set_attr { "sudo" eval {" def commands = ${ctx}.getDiscoveryProvider(com.snc.sw.dto.ProviderType.SSH).getPrivilegedCommand(); return commands; "} } } step { name = "Get Queues Unix" if { condition = eq { get_attr {"computer_system.osFamily"} "UNIX" } on_true = runcmd_to_var { cmd = concat { get_attr {"sudo"} " rabbitmqctl -p " get_attr {"entry_point.vhost"} " list_queues name pid slave_pids | grep " get_attr {"parent.node_name"} } var_names = table { name = "QueueTable" col_names = "QueueName" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s.*"} if_not_found_do = nop {} cache_flag = 0 } on_false = nop {} } } step { name = "Filter table" filter { src_table_name = "QueueTable" target_table_name = "QueueTable" condition = eq { get_attr {"QueueTable[].QueueName"} get_attr {"parent.entry_point.queue_name"} } } } step { name = "set name" if { condition = is_not_empty {get_attr {"QueueTable"}} on_true = set_attr { "name" get_attr {"parent.entry_point.queue_name"} } on_false = nop {} } } step { name = "Set vhost" set_attr { "vhost" get_attr {"entry_point.vhost"} } } step { name = "set label" set_attr { "name" concat { get_attr {"parent.entry_point.queue_name"} " (" get_attr {"vhost"} ")" } } } step { name = "Check Mandatory Attributes" match { all { is_not_empty {get_attr {"vhost"}} is_not_empty {get_attr {"name"}} } terminate_op = terminate } } } connection { name = "queue connectivity unix" step { name = "get consumers" runcmd_to_var { cmd = concat { get_attr {"sudo"} " rabbitmqctl -q -p " get_attr {"vhost"} " list_consumers" } var_names = table { name = "ConsumersTable" col_names = "QueueName","ChannelID" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "get channales" runcmd_to_var { cmd = concat { get_attr {"sudo"} " rabbitmqctl -q list_channels pid connection" } var_names = table { name = "ChannelsTable" col_names = "ChannelID","ConnectionID" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "get connections" runcmd_to_var { cmd = concat { get_attr {"sudo"} " rabbitmqctl -q list_connections pid peer_host peer_port vhost" } var_names = table { name = "ConnectionTable" col_names = "ConnectionID","host","port","vhost" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)\\s(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "merge 1" merge { table1_name = "ConsumersTable" table2_name = "ChannelsTable" result_table_name = "MergedTable" unmatched_lines = remove condition = eq { get_attr {"ConsumersTable[].ChannelID"} get_attr {"ChannelsTable[].ChannelID"} } } } step { name = "merge 2" merge { table1_name = "MergedTable" table2_name = "ConnectionTable" result_table_name = "MergedTable" unmatched_lines = remove condition = eq { get_attr {"MergedTable[].ConnectionID"} get_attr {"ConnectionTable[].ConnectionID"} } } } step { name = "filter table" filter { src_table_name = "MergedTable" target_table_name = "MergedTable" condition = eq { get_attr {"MergedTable[].QueueName"} get_attr {"entry_point.name"} } } } step { name = "create connection" create_connection { connection_type = APPLICATION_FLOW entry_point_type = "cmdb_ci_endpoint_tcp" attributes { attribute { name = "host" value = get_attr {"MergedTable[*].host"} } attribute { name = "port" value = get_attr {"MergedTable[*].port"} } } is_artificial = "false" traffic_based = "false" } } } connection { name = "queue connectivity windows" step { name = "get consumers" runcmd_to_var { cmd = concat { "\"" get_attr {"parent.install_directory"} "\\\\sbin\\\\rabbitmqctl.bat\" " "-q -p " get_attr {"vhost"} " list_consumers" } var_names = table { name = "ConsumersTable" col_names = "QueueName","ChannelID" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "get channels" runcmd_to_var { cmd = concat { "\"" get_attr {"parent.install_directory"} "\\\\sbin\\\\rabbitmqctl.bat\" " " -q list_channels pid connection" } var_names = table { name = "ChannelsTable" col_names = "ChannelID","ConnectionID" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "get connections" runcmd_to_var { cmd = concat { "\"" get_attr {"parent.install_directory"} "\\\\sbin\\\\rabbitmqctl.bat\" " "-q list_connections pid peer_host peer_port vhost" } var_names = table { name = "ConnectionTable" col_names = "ConnectionID","host","port","vhost" } parsing_strategy = regex_parsing {regex = "(\\S*)\\s(\\S*)\\s(\\S*)\\s(\\S*)"} if_not_found_do = nop {} cache_flag = 0 } } step { name = "merge 1" merge { table1_name = "ConsumersTable" table2_name = "ChannelsTable" result_table_name = "MergedTable" unmatched_lines = remove condition = eq { get_attr {"ConsumersTable[].ChannelID"} get_attr {"ChannelsTable[].ChannelID"} } } } step { name = "merge 2" merge { table1_name = "MergedTable" table2_name = "ConnectionTable" result_table_name = "MergedTable" unmatched_lines = remove condition = eq { get_attr {"MergedTable[].ConnectionID"} get_attr {"ConnectionTable[].ConnectionID"} } } } step { name = "filter table" filter { src_table_name = "MergedTable" target_table_name = "MergedTable" condition = eq { get_attr {"MergedTable[].QueueName"} get_attr {"parent.entry_point.queue_name"} } } } step { name = "create connection" create_connection { connection_type = APPLICATION_FLOW entry_point_type = "cmdb_ci_endpoint_tcp" attributes { attribute { name = "host" value = get_attr {"MergedTable[*].host"} } attribute { name = "port" value = get_attr {"MergedTable[*].port"} } } is_artificial = "false" traffic_based = "false" } } } }