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}