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