devops_armory/monitoring/gke/ram/
usage.rs1use awc::{
2 Client, Connector,
3 ws::{
4 self,
5 Frame
6 },
7};
8
9use futures::StreamExt;
10use futures_util::SinkExt as _;
11
12use openssl::ssl::{
13 SslConnector,
14 SslMethod,
15 SslVerifyMode
16};
17
18pub async fn mem_usage_in_bytes_cgroup2(
19 token: String,
20 gke_cluster_endpoint: String,
21 gke_cluster_namespace: String,
22 gke_pod_name: String
23) -> Result<f64, std::io::Error> {
24
25 let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
26 builder.set_verify(SslVerifyMode::NONE);
27 let myconnector = builder.build();
28 let client = Client::builder()
29 .connector(Connector::new().openssl(myconnector))
30 .finish();
31 loop {
32 let Ok((_resp, mut connection2)) = client
33 .ws(format!("https://{gke_cluster_endpoint}:443/api/v1/namespaces/{gke_cluster_namespace}/pods/{gke_pod_name}/exec?command=cat&command=/sys/fs/cgroup/memory.current&stdin=true&stdout=true&stderr=true"))
34 .bearer_auth(format!("{token}"))
35 .connect()
36 .await
37 else {
38 continue;
39 };
40
41 connection2
42 .send(ws::Message::Text("SGVsbG8sIHdvcmxkIQ==".into()))
43 .await
44 .unwrap();
45 loop {
46 let response = connection2.next().await;
47 match response {
48 Some(Ok(Frame::Binary(b))) => {
49
50 let s = String::from_utf8_lossy(&b);
51 let v = s.trim_matches(|c: char| !c.is_alphanumeric());
52 if v.is_empty() {
53 continue;
54 }
55
56 let mem: f64 = v.parse().expect("not correct type");
57
58 return Ok(mem);
59 }
60 Some(Ok(Frame::Close(_c))) => {
61 println!("Connection closed");
62 }
64 Some(Ok(_)) => todo!(),
65 Some(Err(e)) => {
66 println!("Some error occured {e}");
67 }
69 None => {
70 break;
71 }
72 }
73 }
74 }
75}
76
77pub async fn mem_usage_in_bytes_cgroup1(
78 token: String,
79 gke_cluster_endpoint: String,
80 gke_cluster_namespace: String,
81 gke_pod_name: String
82) -> Result<f64, std::io::Error> {
83
84 let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
85 builder.set_verify(SslVerifyMode::NONE);
86 let myconnector = builder.build();
87 let client = Client::builder()
88 .connector(Connector::new().openssl(myconnector))
89 .finish();
90 loop {
91 let Ok((_resp, mut connection2)) = client
92 .ws(format!("https://{gke_cluster_endpoint}:443/api/v1/namespaces/{gke_cluster_namespace}/pods/{gke_pod_name}/exec?command=cat&command=/sys/fs/cgroup/memory/memory.usage_in_bytes&stdin=true&stdout=true&stderr=true"))
93 .bearer_auth(format!("{token}"))
94 .connect()
95 .await
96 else {
97 continue;
98 };
99
100 connection2
101 .send(ws::Message::Text("SGVsbG8sIHdvcmxkIQ==".into()))
102 .await
103 .unwrap();
104 loop {
105 let response = connection2.next().await;
107 match response {
108 Some(Ok(Frame::Binary(b))) => {
109 let s = String::from_utf8_lossy(&b);
111 let v = s.trim_matches(|c: char| !c.is_alphanumeric());
112 if v.is_empty() {
113 continue;
114 }
115
116 let mem: f64 = v.parse().expect("not correct type");
117
118 return Ok(mem);
119 }
120 Some(Ok(Frame::Close(_c))) => {
121 println!("Connection closed");
122 }
124 Some(Ok(_)) => todo!(),
125 Some(Err(e)) => {
126 println!("Some error occured {e}");
127 }
129 None => {
130 break;
131 }
132 }
133 }
134 }
135}