Skip to content

Commit 7ebed60

Browse files
committed
Complete docs
1 parent 303e230 commit 7ebed60

35 files changed

+607
-546
lines changed

analyzer.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/// @file analyzer.c
22
#include "analyzer.h"
33

4-
/**
5-
* Calculates avarage cpu usage.
6-
* @param[in] prev
7-
* @param[out] avarage_cpu_usage
4+
/**
5+
* @brief Calculates cpu usage.
6+
* @param prev previous proc_stat
7+
* @param current current proc_stat
8+
* @return Cpu usage in %
89
*/
9-
static unsigned long average_cpu_usage(struct proc_stat prev,
10+
static unsigned long cpu_usage(struct proc_stat prev,
1011
struct proc_stat current) {
1112
unsigned long prevIdle = prev.idle + prev.iowait;
1213
unsigned long idle = current.idle + current.iowait;
@@ -25,6 +26,12 @@ static unsigned long average_cpu_usage(struct proc_stat prev,
2526
return (total - idle) * 100 / total;
2627
}
2728

29+
/**
30+
* @brief Analyzer function
31+
*
32+
* The Analyzer is responsible for taking data from the buffer and processing it into % CPU usage.
33+
*
34+
*/
2835
void *analyzer(void *arg) {
2936
struct proc_stat *prev;
3037
unsigned long *avg;
@@ -49,7 +56,7 @@ void *analyzer(void *arg) {
4956

5057
stats = get_item_from_data_buffer();
5158
for (int i = 0; i < g_nproc; i++) {
52-
avg[i] = average_cpu_usage(prev[i], stats[i]);
59+
avg[i] = cpu_usage(prev[i], stats[i]);
5360
prev[i] = stats[i];
5461
}
5562

cputracker.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ static void handler(int signum) {
3535

3636
/**
3737
* @brief Function retrieving the number of threads
38-
*
38+
*
3939
* @param signum signal number
4040
*
4141
* @return 0 if the number of threads has been retrieved else -1
@@ -50,7 +50,7 @@ static int get_nproc(int *nproc) {
5050

5151
/**
5252
* @brief Function getting the semaphore value
53-
*
53+
*
5454
* @param sem semaphore
5555
*
5656
* @return sem value
@@ -62,8 +62,8 @@ static int get_semaphore_value(sem_t *sem) {
6262
}
6363

6464
/**
65-
* @brief Function getting item in data buffer
66-
*
65+
* @brief Function getting item from data buffer
66+
*
6767
* @return proc_stat struct from data buffer
6868
*/
6969
struct proc_stat *get_item_from_data_buffer(void) {
@@ -72,8 +72,8 @@ struct proc_stat *get_item_from_data_buffer(void) {
7272
}
7373

7474
/**
75-
* @brief Function getting item in print buffer
76-
*
75+
* @brief Function getting item from print buffer
76+
*
7777
* @return proc_stat struct from print buffer
7878
*/
7979
unsigned long *get_item_from_print_buffer(void) {
@@ -83,7 +83,7 @@ unsigned long *get_item_from_print_buffer(void) {
8383

8484
/**
8585
* @brief Notify the watchdog that thread is alive
86-
*
86+
*
8787
* @param id Thread ID
8888
*/
8989
void notify_watchdog(int id) {
@@ -93,7 +93,7 @@ void notify_watchdog(int id) {
9393
}
9494

9595
/**
96-
* @brief Watchdog function.
96+
* @brief Watchdog function
9797
*
9898
* This function checks whether the threads are alive.
9999
* If a thread does not speak for 2 seconds the watchdog kills the program
@@ -116,7 +116,7 @@ static void watchdog(void) {
116116
}
117117

118118
/**
119-
* @brief Simple test function with asserts.
119+
* @brief Simple test function with asserts
120120
*/
121121
void main_test(void) {
122122
int nproc;

docs/html/analyzer_8c.html

Lines changed: 52 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
8282
Functions</h2></td></tr>
8383
<tr class="memitem:a60d1e2bdc5c39558234c421a071d6f1c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="analyzer_8c.html#a60d1e2bdc5c39558234c421a071d6f1c">analyzer</a> (void *arg)</td></tr>
84+
<tr class="memdesc:a60d1e2bdc5c39558234c421a071d6f1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Analyzer function. <br /></td></tr>
8485
<tr class="separator:a60d1e2bdc5c39558234c421a071d6f1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
8586
</table>
8687
<h2 class="groupheader">Function Documentation</h2>
@@ -100,54 +101,57 @@ <h2 class="memtitle"><span class="permalink"><a href="#a60d1e2bdc5c39558234c421a
100101
</table>
101102
</div><div class="memdoc">
102103

103-
<p class="definition">Definition at line <a class="el" href="analyzer_8c_source.html#l00028">28</a> of file <a class="el" href="analyzer_8c_source.html">analyzer.c</a>.</p>
104-
<div class="fragment"><div class="line"><span class="lineno"> 28</span> {</div>
105-
<div class="line"><span class="lineno"> 29</span> <span class="keyword">struct </span><a class="code hl_struct" href="structproc__stat.html">proc_stat</a> *prev;</div>
106-
<div class="line"><span class="lineno"> 30</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *avg;</div>
107-
<div class="line"><span class="lineno"> 31</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *bufforAvg;</div>
108-
<div class="line"><span class="lineno"> 32</span> <span class="keyword">struct </span><a class="code hl_struct" href="structproc__stat.html">proc_stat</a> *stats;</div>
109-
<div class="line"><span class="lineno"> 33</span> </div>
110-
<div class="line"><span class="lineno"> 34</span> (void)arg;</div>
111-
<div class="line"><span class="lineno"> 35</span> </div>
112-
<div class="line"><span class="lineno"> 36</span> <span class="keywordflow">if</span> ((prev = malloc((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code hl_struct" href="structproc__stat.html">proc_stat</a>))) ==</div>
113-
<div class="line"><span class="lineno"> 37</span> NULL) {</div>
114-
<div class="line"><span class="lineno"> 38</span> <span class="keywordflow">return</span> NULL;</div>
115-
<div class="line"><span class="lineno"> 39</span> }</div>
116-
<div class="line"><span class="lineno"> 40</span> <span class="keywordflow">if</span> ((avg = malloc((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>))) == NULL) {</div>
117-
<div class="line"><span class="lineno"> 41</span> free(prev);</div>
118-
<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">return</span> NULL;</div>
119-
<div class="line"><span class="lineno"> 43</span> }</div>
120-
<div class="line"><span class="lineno"> 44</span> pthread_cleanup_push(free, prev) pthread_cleanup_push(free, avg) <span class="keywordflow">while</span> (1) {</div>
121-
<div class="line"><span class="lineno"> 45</span> <a class="code hl_function" href="cputracker_8c.html#ac99b6069bf629214ce6258902739d613">notify_watchdog</a>(Analyzer);</div>
122-
<div class="line"><span class="lineno"> 46</span> </div>
123-
<div class="line"><span class="lineno"> 47</span> sem_wait(&amp;g_dataFilledSpaceSemaphore);</div>
124-
<div class="line"><span class="lineno"> 48</span> pthread_mutex_lock(&amp;g_dataBufferMutex);</div>
125-
<div class="line"><span class="lineno"> 49</span> </div>
126-
<div class="line"><span class="lineno"> 50</span> stats = <a class="code hl_function" href="cputracker_8c.html#a6d7b4993bb9144e4cab9f9c7420c996a">get_item_from_data_buffer</a>();</div>
127-
<div class="line"><span class="lineno"> 51</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; g_nproc; i++) {</div>
128-
<div class="line"><span class="lineno"> 52</span> avg[i] = average_cpu_usage(prev[i], stats[i]);</div>
129-
<div class="line"><span class="lineno"> 53</span> prev[i] = stats[i];</div>
130-
<div class="line"><span class="lineno"> 54</span> }</div>
131-
<div class="line"><span class="lineno"> 55</span> </div>
132-
<div class="line"><span class="lineno"> 56</span> pthread_mutex_unlock(&amp;g_dataBufferMutex);</div>
133-
<div class="line"><span class="lineno"> 57</span> sem_post(&amp;g_dataLeftSpaceSemaphore);</div>
134-
<div class="line"><span class="lineno"> 58</span> </div>
135-
<div class="line"><span class="lineno"> 59</span> <span class="comment">//</span></div>
136-
<div class="line"><span class="lineno"> 60</span> </div>
137-
<div class="line"><span class="lineno"> 61</span> sem_wait(&amp;g_printLeftSpaceSemaphore);</div>
138-
<div class="line"><span class="lineno"> 62</span> pthread_mutex_lock(&amp;g_printBufferMutex);</div>
139-
<div class="line"><span class="lineno"> 63</span> </div>
140-
<div class="line"><span class="lineno"> 64</span> bufforAvg = <a class="code hl_function" href="cputracker_8c.html#a2b8f2341417ff6536dcfd85113bd3a5d">get_item_from_print_buffer</a>();</div>
141-
<div class="line"><span class="lineno"> 65</span> memcpy(bufforAvg, avg, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>));</div>
142-
<div class="line"><span class="lineno"> 66</span> </div>
143-
<div class="line"><span class="lineno"> 67</span> pthread_mutex_unlock(&amp;g_printBufferMutex);</div>
144-
<div class="line"><span class="lineno"> 68</span> sem_post(&amp;g_printFilledSpaceSemaphore);</div>
145-
<div class="line"><span class="lineno"> 69</span> }</div>
146-
<div class="line"><span class="lineno"> 70</span> pthread_cleanup_pop(1);</div>
147-
<div class="line"><span class="lineno"> 71</span> pthread_cleanup_pop(1);</div>
148-
<div class="line"><span class="lineno"> 72</span>}</div>
149-
<div class="ttc" id="acputracker_8c_html_a2b8f2341417ff6536dcfd85113bd3a5d"><div class="ttname"><a href="cputracker_8c.html#a2b8f2341417ff6536dcfd85113bd3a5d">get_item_from_print_buffer</a></div><div class="ttdeci">unsigned long * get_item_from_print_buffer(void)</div><div class="ttdoc">Function getting item in print buffer.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8c_source.html#l00079">cputracker.c:79</a></div></div>
150-
<div class="ttc" id="acputracker_8c_html_a6d7b4993bb9144e4cab9f9c7420c996a"><div class="ttname"><a href="cputracker_8c.html#a6d7b4993bb9144e4cab9f9c7420c996a">get_item_from_data_buffer</a></div><div class="ttdeci">struct proc_stat * get_item_from_data_buffer(void)</div><div class="ttdoc">Function getting item in data buffer.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8c_source.html#l00069">cputracker.c:69</a></div></div>
104+
<p>Analyzer function. </p>
105+
<p>The Analyzer is responsible for taking data from the buffer and processing it into % CPU usage. </p>
106+
107+
<p class="definition">Definition at line <a class="el" href="analyzer_8c_source.html#l00035">35</a> of file <a class="el" href="analyzer_8c_source.html">analyzer.c</a>.</p>
108+
<div class="fragment"><div class="line"><span class="lineno"> 35</span> {</div>
109+
<div class="line"><span class="lineno"> 36</span> <span class="keyword">struct </span><a class="code hl_struct" href="structproc__stat.html">proc_stat</a> *prev;</div>
110+
<div class="line"><span class="lineno"> 37</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *avg;</div>
111+
<div class="line"><span class="lineno"> 38</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *bufforAvg;</div>
112+
<div class="line"><span class="lineno"> 39</span> <span class="keyword">struct </span><a class="code hl_struct" href="structproc__stat.html">proc_stat</a> *stats;</div>
113+
<div class="line"><span class="lineno"> 40</span> </div>
114+
<div class="line"><span class="lineno"> 41</span> (void)arg;</div>
115+
<div class="line"><span class="lineno"> 42</span> </div>
116+
<div class="line"><span class="lineno"> 43</span> <span class="keywordflow">if</span> ((prev = malloc((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code hl_struct" href="structproc__stat.html">proc_stat</a>))) ==</div>
117+
<div class="line"><span class="lineno"> 44</span> NULL) {</div>
118+
<div class="line"><span class="lineno"> 45</span> <span class="keywordflow">return</span> NULL;</div>
119+
<div class="line"><span class="lineno"> 46</span> }</div>
120+
<div class="line"><span class="lineno"> 47</span> <span class="keywordflow">if</span> ((avg = malloc((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>))) == NULL) {</div>
121+
<div class="line"><span class="lineno"> 48</span> free(prev);</div>
122+
<div class="line"><span class="lineno"> 49</span> <span class="keywordflow">return</span> NULL;</div>
123+
<div class="line"><span class="lineno"> 50</span> }</div>
124+
<div class="line"><span class="lineno"> 51</span> pthread_cleanup_push(free, prev) pthread_cleanup_push(free, avg) <span class="keywordflow">while</span> (1) {</div>
125+
<div class="line"><span class="lineno"> 52</span> <a class="code hl_function" href="cputracker_8c.html#ac99b6069bf629214ce6258902739d613">notify_watchdog</a>(Analyzer);</div>
126+
<div class="line"><span class="lineno"> 53</span> </div>
127+
<div class="line"><span class="lineno"> 54</span> sem_wait(&amp;g_dataFilledSpaceSemaphore);</div>
128+
<div class="line"><span class="lineno"> 55</span> pthread_mutex_lock(&amp;g_dataBufferMutex);</div>
129+
<div class="line"><span class="lineno"> 56</span> </div>
130+
<div class="line"><span class="lineno"> 57</span> stats = <a class="code hl_function" href="cputracker_8c.html#a6d7b4993bb9144e4cab9f9c7420c996a">get_item_from_data_buffer</a>();</div>
131+
<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; g_nproc; i++) {</div>
132+
<div class="line"><span class="lineno"> 59</span> avg[i] = cpu_usage(prev[i], stats[i]);</div>
133+
<div class="line"><span class="lineno"> 60</span> prev[i] = stats[i];</div>
134+
<div class="line"><span class="lineno"> 61</span> }</div>
135+
<div class="line"><span class="lineno"> 62</span> </div>
136+
<div class="line"><span class="lineno"> 63</span> pthread_mutex_unlock(&amp;g_dataBufferMutex);</div>
137+
<div class="line"><span class="lineno"> 64</span> sem_post(&amp;g_dataLeftSpaceSemaphore);</div>
138+
<div class="line"><span class="lineno"> 65</span> </div>
139+
<div class="line"><span class="lineno"> 66</span> <span class="comment">//</span></div>
140+
<div class="line"><span class="lineno"> 67</span> </div>
141+
<div class="line"><span class="lineno"> 68</span> sem_wait(&amp;g_printLeftSpaceSemaphore);</div>
142+
<div class="line"><span class="lineno"> 69</span> pthread_mutex_lock(&amp;g_printBufferMutex);</div>
143+
<div class="line"><span class="lineno"> 70</span> </div>
144+
<div class="line"><span class="lineno"> 71</span> bufforAvg = <a class="code hl_function" href="cputracker_8c.html#a2b8f2341417ff6536dcfd85113bd3a5d">get_item_from_print_buffer</a>();</div>
145+
<div class="line"><span class="lineno"> 72</span> memcpy(bufforAvg, avg, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)g_nproc * <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>));</div>
146+
<div class="line"><span class="lineno"> 73</span> </div>
147+
<div class="line"><span class="lineno"> 74</span> pthread_mutex_unlock(&amp;g_printBufferMutex);</div>
148+
<div class="line"><span class="lineno"> 75</span> sem_post(&amp;g_printFilledSpaceSemaphore);</div>
149+
<div class="line"><span class="lineno"> 76</span> }</div>
150+
<div class="line"><span class="lineno"> 77</span> pthread_cleanup_pop(1);</div>
151+
<div class="line"><span class="lineno"> 78</span> pthread_cleanup_pop(1);</div>
152+
<div class="line"><span class="lineno"> 79</span>}</div>
153+
<div class="ttc" id="acputracker_8c_html_a2b8f2341417ff6536dcfd85113bd3a5d"><div class="ttname"><a href="cputracker_8c.html#a2b8f2341417ff6536dcfd85113bd3a5d">get_item_from_print_buffer</a></div><div class="ttdeci">unsigned long * get_item_from_print_buffer(void)</div><div class="ttdoc">Function getting item from print buffer.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8c_source.html#l00079">cputracker.c:79</a></div></div>
154+
<div class="ttc" id="acputracker_8c_html_a6d7b4993bb9144e4cab9f9c7420c996a"><div class="ttname"><a href="cputracker_8c.html#a6d7b4993bb9144e4cab9f9c7420c996a">get_item_from_data_buffer</a></div><div class="ttdeci">struct proc_stat * get_item_from_data_buffer(void)</div><div class="ttdoc">Function getting item from data buffer.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8c_source.html#l00069">cputracker.c:69</a></div></div>
151155
<div class="ttc" id="acputracker_8c_html_ac99b6069bf629214ce6258902739d613"><div class="ttname"><a href="cputracker_8c.html#ac99b6069bf629214ce6258902739d613">notify_watchdog</a></div><div class="ttdeci">void notify_watchdog(int id)</div><div class="ttdoc">Notify the watchdog that thread is alive.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8c_source.html#l00089">cputracker.c:89</a></div></div>
152156
<div class="ttc" id="astructproc__stat_html"><div class="ttname"><a href="structproc__stat.html">proc_stat</a></div><div class="ttdoc">Struct for /proc/stats info.</div><div class="ttdef"><b>Definition:</b> <a href="cputracker_8h_source.html#l00030">cputracker.h:30</a></div></div>
153157
</div><!-- fragment -->

0 commit comments

Comments
 (0)