@@ -18,6 +18,7 @@ with GNAT.Expect; use GNAT.Expect;
1818with Ada.Exceptions ; use Ada.Exceptions;
1919
2020with CPU_STAT_PID ; use CPU_STAT_PID;
21+ with Logger ; use Logger;
2122
2223package body CPU_STAT_TID is
2324
@@ -31,6 +32,7 @@ package body CPU_STAT_TID is
3132 Stime : Long_Integer;
3233 Sum_Time : Long_Integer;
3334 begin
35+ Logger.Log(Debug, " Opening stat file for TID " & Integer'Image(TID) & " of PID " & Integer'Image(PID));
3436 Open (F, In_File, File_Name);
3537 String_Split.Create (
3638 S => Subs,
@@ -43,20 +45,25 @@ package body CPU_STAT_TID is
4345 Utime := Long_Integer'Value (String_Split.Slice (Subs, 14 ));
4446 Stime := Long_Integer'Value (String_Split.Slice (Subs, 15 ));
4547 Sum_Time := Utime + Stime;
48+
49+ Logger.Log(Debug, " TID " & Integer'Image(TID) & " of PID " & Integer'Image(PID) &
50+ " Utime=" & Long_Integer'Image(Utime) &
51+ " Stime=" & Long_Integer'Image(Stime) &
52+ " Sum=" & Long_Integer'Image(Sum_Time));
53+
4654 return Sum_Time;
4755 exception
4856 when NAME_ERROR | STATUS_ERROR =>
49- Put_Line (Standard_Error , " Error opening or reading the file: " & File_Name);
57+ Logger.Log(Error , " Error opening or reading the file: " & File_Name);
5058 return 0 ;
5159 when DATA_ERROR | NUMERIC_ERROR =>
52- Put_Line (Standard_Error , " Error converting data from the file: " & File_Name);
60+ Logger.Log(Error , " Error converting data from the file: " & File_Name);
5361 return 0 ;
5462 when others =>
55- Put_Line (Standard_Error , " Unknown error processing the file: " & File_Name);
63+ Logger.Log(Error , " Unknown error processing the file: " & File_Name);
5664 return 0 ;
5765 end Get_TID_Time ;
5866
59-
6067 -- Calculate PID Time using TID instead of PID directly
6168 procedure Calculate_PID_Time_TID (PID_Data : in out CPU_STAT_PID_Data; Is_Before : in Boolean) is
6269 Task_Directory : constant String := " /proc/" & Trim(Integer'Image(PID_Data.PID_Number), Ada.Strings.Left) & " /task" ;
@@ -73,6 +80,8 @@ package body CPU_STAT_TID is
7380 type TID_Array_Int is array (1 ..100 ) of Integer;
7481 TID_Array : TID_Array_Int; -- Array of all TIDs of the application
7582 begin
83+ Logger.Log(Info, " Calculating CPU time for PID: " & Integer'Image(PID_Data.PID_Number));
84+
7685 Args := Argument_String_To_List (Command);
7786 TID_Array := (others => -1 );
7887 declare
@@ -86,7 +95,7 @@ package body CPU_STAT_TID is
8695 Free (Args);
8796 String_Split.Create (S => Subs, -- Store sliced data in Subs
8897 From => Response, -- Read data to slice
89- Separators => Seps, -- Separator (here space )
98+ Separators => Seps, -- Separator (here newline )
9099 Mode => String_Split.Multiple);
91100 Slice_number_count := String_Split.Slice_Count (Subs);
92101
@@ -95,33 +104,38 @@ package body CPU_STAT_TID is
95104 TID_Array(Loop_I) := Integer'Value (String_Split.Slice (Subs, I));
96105 TID_Counter := TID_Counter + 1 ;
97106 end loop ;
107+ Logger.Log(Debug, " Found " & Integer'Image(TID_Counter) & " TIDs for PID " & Integer'Image(PID_Data.PID_Number));
98108 end ;
99109
100110 for I in 1 .. TID_Counter loop
101111 if TID_Array(I) /= -1 then
102112 TID_Number := TID_Array (I);
113+ Logger.Log(Debug, " Processing TID: " & Integer'Image(TID_Number));
103114 TID_Total_Time := TID_Total_Time + Get_TID_Time (PID_Data.PID_Number, TID_Number);
104115 end if ;
105116 end loop ;
117+
106118 if (Is_Before) then
107119 PID_Data.Before_Time := TID_Total_Time;
120+ Logger.Log(Info, " Stored 'Before' time: " & Long_Integer'Image(PID_Data.Before_Time));
108121 else
109122 PID_Data.After_Time := TID_Total_Time;
110123 PID_Data.Monitored_Time := PID_Data.After_Time - PID_Data.Before_Time;
124+ Logger.Log(Info, " Stored 'After' time: " & Long_Integer'Image(PID_Data.After_Time));
125+ Logger.Log(Info, " Monitored time difference: " & Long_Integer'Image(PID_Data.Monitored_Time));
111126 end if ;
112127 exception
113128 when NAME_ERROR | STATUS_ERROR =>
114- Put_Line (Standard_Error , " Error dealing with files in /proc/ " & Trim(Integer'Image(PID_Data.PID_Number), Ada.Strings.Left) & " /task directory " );
129+ Logger.Log(Error , " Error dealing with files in " & Task_Directory );
115130 OS_Exit (0 );
116131 when DATA_ERROR =>
117- Put_Line (Standard_Error , " Error related to data formatting or I/O" );
132+ Logger.Log(Error , " Error related to data formatting or I/O" );
118133 OS_Exit (0 );
119134 when E : NUMERIC_ERROR =>
120- Put_Line (Standard_Error, " Arithmetic error encountered" );
121- Put_Line (Exception_Message (E));
135+ Logger.Log(Error, " Arithmetic error encountered: " & Exception_Message (E));
122136 OS_Exit (0 );
123137 when others =>
124- Put_Line (Standard_Error , " Unknown error processing /proc/ " & Trim(Integer'Image(PID_Data.PID_Number), Ada.Strings.Left) & " /task directory " );
138+ Logger.Log(Error , " Unknown error processing " & Task_Directory );
125139 OS_Exit (0 );
126140 end Calculate_PID_Time_TID ;
127141
0 commit comments