Guest User

Untitled

a guest
Mar 23rd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. enum Header {
  2. Cpu = 0,
  3. Usr,
  4. Sys,
  5. Iowait,
  6. Idle,
  7. Other,
  8. }
  9.  
  10. #[derive(Debug)]
  11. enum HeaderValue<'a> {
  12. Cpu(&'a str),
  13. Usr(f32),
  14. Sys(f32),
  15. Iowait(f32),
  16. Idle(f32),
  17. Other(f32),
  18. }
  19.  
  20. fn main() {
  21. let str = "
  22. Linux 4.9.68-1-lts (xxx) 13/03/18 _x86_64_ (8 CPU)
  23.  
  24. Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  25. Average: all 2.80 0.00 1.01 0.13 0.00 0.16 0.00 0.00 0.00 95.92
  26. Average: 0 6.78 0.00 1.26 0.75 0.00 0.25 0.00 0.08 0.00 90.95
  27. Average: 1 1.25 0.00 0.75 0.25 0.10 0.75 0.00 0.03 0.00 97.00
  28. Average: 2 1.75 0.00 1.75 0.00 0.00 0.25 0.00 0.00 0.00 96.25
  29. Average: 3 1.75 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 97.51
  30. Average: 4 7.07 0.00 0.51 0.00 0.00 0.00 0.00 0.00 0.00 92.42
  31. Average: 5 1.26 0.00 0.50 0.00 0.20 0.00 0.00 0.00 0.00 98.24
  32. Average: 6 1.77 0.00 1.52 0.00 0.00 0.00 0.00 0.00 0.00 96.71
  33. Average: 7 0.76 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 98.23
  34. ";
  35.  
  36. println!("{}", str);
  37.  
  38. let mut headers_parsed = false;
  39.  
  40. let mut headers_idx: Vec<Header> = vec![];
  41.  
  42. let mut cpus_values: Vec<Vec<HeaderValue>> = vec![];
  43.  
  44. for line in str.lines() {
  45. if line.starts_with("Average") {
  46. let cols: Vec<&str> = line.split(' ').filter(|c| *c != "").collect();
  47. if headers_parsed {
  48. let mut all_values: Vec<HeaderValue> = vec![
  49. HeaderValue::Cpu(""),
  50. HeaderValue::Usr(0.0f32),
  51. HeaderValue::Sys(0.0f32),
  52. HeaderValue::Iowait(0.0f32),
  53. HeaderValue::Idle(0.0f32),
  54. HeaderValue::Other(0.0f32),
  55. ];
  56.  
  57. for (idx, val) in cols.iter().skip(1).enumerate() {
  58. let header = &headers_idx[idx];
  59. let fval = match val.parse::<f32>() {
  60. // unneeded for Cpu
  61. Ok(v) => v,
  62. _ => 0.0f32,
  63. };
  64. match *header {
  65. Header::Cpu => {
  66. all_values[Header::Cpu as usize] = HeaderValue::Cpu(val);
  67. }
  68. Header::Usr => {
  69. all_values[Header::Usr as usize] = HeaderValue::Usr(fval);
  70. }
  71. Header::Sys => {
  72. all_values[Header::Sys as usize] = HeaderValue::Sys(fval);
  73. }
  74. Header::Iowait => {
  75. all_values[Header::Iowait as usize] = HeaderValue::Iowait(fval);
  76. }
  77. Header::Idle => {
  78. all_values[Header::Idle as usize] = HeaderValue::Idle(fval);
  79. }
  80. Header::Other => {
  81. if let HeaderValue::Other(prev_fval) =
  82. all_values[Header::Other as usize]
  83. {
  84. all_values[Header::Other as usize] =
  85. HeaderValue::Other(fval + prev_fval);
  86. }
  87. }
  88. };
  89. }
  90. cpus_values.push(all_values);
  91. } else {
  92. headers_idx.reserve(cols.len());
  93. unsafe {
  94. headers_idx.set_len(cols.len());
  95. }
  96. for (idx, head) in cols.iter().skip(1).enumerate() {
  97. let header = match head.to_lowercase().as_ref() {
  98. "cpu" => Header::Cpu,
  99. "%usr" => Header::Usr,
  100. "%sys" => Header::Sys,
  101. "%iowait" => Header::Iowait,
  102. "%idle" => Header::Idle,
  103. _ => Header::Other,
  104. };
  105. headers_idx[idx] = header;
  106. }
  107.  
  108. headers_parsed = true;
  109. }
  110. }
  111. }
  112.  
  113. for values in cpus_values.iter() {
  114. println!("{:?}", values);
  115. }
  116. }
Add Comment
Please, Sign In to add comment