Skip to content

Commit 4a619e7

Browse files
committed
Improved codes
1 parent 56f7cd0 commit 4a619e7

1 file changed

Lines changed: 62 additions & 9 deletions

File tree

Lesson_03/src/main.rs

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
1919
kullanılabilir.
2020
*/
21+
use std::env;
2122
use std::thread::sleep;
2223
use std::time::Duration;
2324
// Kodun devam edam kısımlarında kullanılan enstrümanların yer aldığı modüller use ile bildirilmelidir.
@@ -33,42 +34,94 @@ use chrono::{DateTime, Utc};
3334
*/
3435
fn main() {
3536
let mut system = sysinfo::System::new_all();
37+
let mut cpu_usages = Vec::new();
3638

3739
// Sürekli metrik çekeceğimiz için bir sonsuz döngü işimizi görebilir
40+
//TODO@buraksenyurt loop gibi sonsuz döngü yerine komut satırı argümanları ile çalıştıralım
41+
/*
42+
cargo run -- 100 2 cpu json
43+
(2 saniyede bir CPU kullanımlarından toplam 100 tane log çek ve json formatında yaz)
44+
cargo run -- 100 2 mem
45+
(2 saniyede bir Memory kullanımlarından toplam 100 tane log çek
46+
ve standart formatta csv olarak yaz)
47+
48+
cargo run -- -c 100 -p 2 -s mem -f json
49+
50+
teknik ? Tüm vector içeriğin program kapanırken topluca dosya yazmak bir seçenek
51+
veya hiç vector kullanmadan stdout üzerinde log ürettikçe dosyaya append et
52+
*/
3853
loop {
3954
system.refresh_all(); // Tüm metrikleri güncelle
4055

4156
println!(
4257
"Free memory size {} Gb",
4358
system.free_memory() / (1024 * 1024)
4459
);
60+
/*
61+
Plan :
62+
63+
CPU kullanım değeri %50 ile %75 arasında olanlar için log seviye HEAT
64+
CPU kullanım değeri %70 ile %90 arasında olanlar için log seviye BURN
65+
CPU kullanım değeri %90 üstü olanlar için log seviye ALARM
66+
diğer CPU kullanım değerleri için log seviye NORMAL
67+
68+
Bu planı uygulamak için pattern matchin'i aşağıdaki gibi kullandık
69+
70+
*/
4571
for (idx, cpu) in system.cpus().iter().enumerate() {
46-
print!(" {} {:2.2}%", idx, cpu.cpu_usage());
72+
// print!(" {} {:2.2}%", idx, cpu.cpu_usage());
73+
let description = format!("{} ({:2.2}%)", idx, cpu.cpu_usage());
74+
let level = match cpu.cpu_usage() {
75+
0.0..50.0 => Level::NORMAL,
76+
50.0..75.0 => Level::HEAT,
77+
75.0..90.0 => Level::BURN,
78+
90.0..100.0 => Level::ALARM,
79+
_ => Level::UNKNOWN,
80+
};
81+
82+
/*
83+
Sınavda bu konudan soru gelir...
84+
85+
Neden clone kullandık?
86+
clone kullanmadığımızda nasıl bir hata mesajı oluştu?
87+
Value used after being moved [E0382] Hatasının sebebi nedir?
88+
*/
89+
let cpu_log = SystemLog::new(idx as u32, Some(Utc::now()), level, description.clone());
90+
print!("{}", description);
91+
92+
cpu_usages.push(cpu_log);
4793
}
4894
println!();
49-
5095
sleep(Duration::from_secs(2)); // Şu anki main thread 1 saniye duraksatılır
5196
}
97+
//TODO@buraksenyurt Sonsuz döngüden çıkardıktan sonra sonuçları bir dosyaya yazdıralım (CSV veya JSON)
5298
}
5399

54100
#[derive(Debug)]
55-
pub struct SystemLog {
56-
pub id: u32,
101+
pub enum Level {
102+
NORMAL,
103+
HEAT,
104+
BURN,
105+
ALARM,
106+
UNKNOWN,
107+
}
108+
#[derive(Debug)]
109+
struct SystemLog {
110+
id: u32,
57111
// Senaryomuza göre time_stamp bilgisinin olup olmadığı belli değil
58112
// bu nedenle Option şeklinde ele alınabilir (Yani Some(value) veya None olarak kullanılır)
59113
// None memory de nasıl tutulur?
60-
pub time_stamp: Option<DateTime<Utc>>,
61-
pub level: String,
62-
pub description: String,
114+
time_stamp: Option<DateTime<Utc>>,
115+
level: Level,
116+
description: String,
63117
}
64118

65119
impl SystemLog {
66-
pub fn new(id: u32, time_stamp: Option<DateTime<Utc>>, level: String, desc: String) -> Self {
120+
pub fn new(id: u32, time_stamp: Option<DateTime<Utc>>, level: Level, desc: String) -> Self {
67121
SystemLog {
68122
id,
69123
level,
70124
time_stamp,
71-
// time_stamp: Utc::now(),
72125
description: desc,
73126
}
74127
}

0 commit comments

Comments
 (0)