cmdb_ip_mapping/lib.rs
1//! # cmdb-ip-mapping
2//!
3//! A library to get appuk by ip from cmdb in [rlink](https://docs.rs/rlink) task.
4//!
5//! # Example
6//!
7//! ## Get appUk by ip
8//! ```
9//! use cmdb_ip_mapping::ip_mapping_config::{load_ip_mapping_task, get_ip_mapping_config};
10//!
11//! let ip = "test_ip";
12//! let ip_mapping_url = "test_mapping_url";
13//!
14//! load_ip_mapping_task(ip_mapping_url);
15//!
16//! let vec = get_ip_mapping_config(ip);
17//! let item = vec.unwrap().get(0).unwrap().clone();
18//! assert!(item.group_environment.as_ref().unwrap().eq("qa"))
19//! ```
20//!
21//! ## Consume ip-mapping incremental change
22//! ```
23//! use std::collections::HashMap;
24//! use cmdb_ip_mapping::ip_mapping_connect::IpMappingCoProcessFunction;
25//! use rlink_connector_kafka::{BOOTSTRAP_SERVERS, GROUP_ID, create_input_format, InputFormatBuilder};
26//! use rlink::functions::flat_map::BroadcastFlagMapFunction;
27//! use rlink::core::element::types;
28//!
29//! pub const FIELD_TYPE: [u8; 2] = [
30//! // 0: timestamp
31//! types::U64,
32//! // 1: app_id
33//! types::STRING,
34//! ];
35//! pub const FIELD_NAME: [&'static str; 2] = [
36//! // 0: timestamp
37//! "timestamp",
38//! // 1: app_id
39//! "app_id",
40//! ];
41//! pub const FIELD_METADATA: FieldMetadata<53> = FieldMetadata::new(&FIELD_TYPE, &FIELD_NAME);
42//!
43//! let ip_mapping_input_format = {
44//! let mut conf_map = HashMap::new();
45//! conf_map.insert(BOOTSTRAP_SERVERS.to_string(), ip_mapping_kafka_servers);
46//! conf_map.insert(GROUP_ID.to_string(), ip_mapping_group_id);
47//! InputFormatBuilder::new(conf_map, vec![ip_mapping_kafka_topic], None).build()
48//! };
49//!
50//! let ip_mapping_stream = env
51//! .register_source(ip_mapping_input_format, 1)
52//! .flat_map(BroadcastFlagMapFunction::new());
53//!
54//! data_stream
55//! .connect(
56//! vec![CoStream::from(ip_mapping_stream)],
57//! IpMappingCoProcessFunction::new(FnSchema::from(&FIELD_METADATA)),
58//! )
59//! ```
60
61#[macro_use]
62extern crate log;
63#[macro_use]
64extern crate lazy_static;
65#[macro_use]
66extern crate serde_derive;
67#[macro_use]
68extern crate rlink_derive;
69
70pub mod ip_mapping_config;
71pub mod ip_mapping_connect;
72
73#[cfg(test)]
74mod tests {
75 use crate::ip_mapping_config::{load_ip_mapping_task, get_ip_mapping_config};
76
77 #[test]
78 fn it_works() {
79 let ip = "10.99.5.49";
80 let ip_mapping_url = "http://10.99.5.49:8080/mapping/all";
81
82 load_ip_mapping_task(ip_mapping_url);
83
84 let vec = get_ip_mapping_config(ip);
85 let item = vec.unwrap().get(0).unwrap().clone();
86 assert!(item.group_environment.as_ref().unwrap().eq("qa"))
87 }
88}