Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
adc09141
Unverified
Commit
adc09141
authored
Jan 12, 2018
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tools: move lxc-top to API symbols only
Closes #2073. Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
52d27da5
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
146 additions
and
26 deletions
+146
-26
lxc_top.c
src/lxc/tools/lxc_top.c
+146
-26
No files found.
src/lxc/tools/lxc_top.c
View file @
adc09141
...
@@ -21,25 +21,26 @@
...
@@ -21,25 +21,26 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
#define _GNU_SOURCE
#define __STDC_FORMAT_MACROS
/* Required for PRIu64 to work. */
#define __STDC_FORMAT_MACROS
/* Required for PRIu64 to work. */
#include <errno.h>
#include <errno.h>
#include <inttypes.h>
#include <inttypes.h>
#include <signal.h>
#include <signal.h>
#include <stdbool.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <st
dint
.h>
#include <st
ring
.h>
#include <termios.h>
#include <termios.h>
#include <unistd.h>
#include <unistd.h>
#include <sys/epoll.h>
#include <sys/epoll.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <lxc/lxccontainer.h>
#include <lxc/lxccontainer.h>
#include "arguments.h"
#include "arguments.h"
#include "log.h"
#include "tool_utils.h"
#include "lxc.h"
#include "mainloop.h"
#include "utils.h"
#define USER_HZ 100
#define USER_HZ 100
#define ESC "\033"
#define ESC "\033"
...
@@ -181,24 +182,6 @@ static int stdin_tios_rows(void)
...
@@ -181,24 +182,6 @@ static int stdin_tios_rows(void)
return
25
;
return
25
;
}
}
static
int
stdin_handler
(
int
fd
,
uint32_t
events
,
void
*
data
,
struct
lxc_epoll_descr
*
descr
)
{
char
*
in_char
=
data
;
if
(
events
&
EPOLLIN
)
{
int
rc
;
rc
=
read
(
fd
,
in_char
,
sizeof
(
*
in_char
));
if
(
rc
<=
0
)
*
in_char
=
'\0'
;
}
if
(
events
&
EPOLLHUP
)
*
in_char
=
'q'
;
return
1
;
}
static
void
sig_handler
(
int
sig
)
static
void
sig_handler
(
int
sig
)
{
{
exit
(
EXIT_SUCCESS
);
exit
(
EXIT_SUCCESS
);
...
@@ -310,7 +293,7 @@ static void stat_get_blk_stats(struct lxc_container *c, const char *item,
...
@@ -310,7 +293,7 @@ static void stat_get_blk_stats(struct lxc_container *c, const char *item,
char
**
lines
,
**
cols
;
char
**
lines
,
**
cols
;
len
=
c
->
get_cgroup_item
(
c
,
item
,
buf
,
sizeof
(
buf
));
len
=
c
->
get_cgroup_item
(
c
,
item
,
buf
,
sizeof
(
buf
));
if
(
len
<=
0
||
len
>=
sizeof
(
buf
))
{
if
(
len
<=
0
||
(
size_t
)
len
>=
sizeof
(
buf
))
{
fprintf
(
stderr
,
"unable to read cgroup item %s
\n
"
,
item
);
fprintf
(
stderr
,
"unable to read cgroup item %s
\n
"
,
item
);
return
;
return
;
}
}
...
@@ -409,7 +392,7 @@ static void stats_print(const char *name, const struct stats *stats,
...
@@ -409,7 +392,7 @@ static void stats_print(const char *name, const struct stats *stats,
size_humanize
(
stats
->
mem_used
,
mem_used_str
,
sizeof
(
mem_used_str
));
size_humanize
(
stats
->
mem_used
,
mem_used_str
,
sizeof
(
mem_used_str
));
ret
=
snprintf
(
iosb_str
,
sizeof
(
iosb_str
),
"%s(%s/%s)"
,
iosb_total_str
,
iosb_read_str
,
iosb_write_str
);
ret
=
snprintf
(
iosb_str
,
sizeof
(
iosb_str
),
"%s(%s/%s)"
,
iosb_total_str
,
iosb_read_str
,
iosb_write_str
);
if
(
ret
<
0
||
ret
>=
sizeof
(
iosb_str
))
if
(
ret
<
0
||
(
size_t
)
ret
>=
sizeof
(
iosb_str
))
printf
(
"snprintf'd too many characters: %d
\n
"
,
ret
);
printf
(
"snprintf'd too many characters: %d
\n
"
,
ret
);
printf
(
"%-18.18s %12.2f %12.2f %12.2f %36s %10s"
,
printf
(
"%-18.18s %12.2f %12.2f %12.2f %36s %10s"
,
...
@@ -429,7 +412,7 @@ static void stats_print(const char *name, const struct stats *stats,
...
@@ -429,7 +412,7 @@ static void stats_print(const char *name, const struct stats *stats,
printf
(
" %10s"
,
kmem_used_str
);
printf
(
" %10s"
,
kmem_used_str
);
}
}
}
else
{
}
else
{
gettimeofday
(
&
time_val
,
NULL
);
(
void
)
gettimeofday
(
&
time_val
,
NULL
);
time_ms
=
(
unsigned
long
long
)
(
time_val
.
tv_sec
)
*
1000
+
(
unsigned
long
long
)
(
time_val
.
tv_usec
)
/
1000
;
time_ms
=
(
unsigned
long
long
)
(
time_val
.
tv_sec
)
*
1000
+
(
unsigned
long
long
)
(
time_val
.
tv_usec
)
/
1000
;
printf
(
"%"
PRIu64
",%s,%"
PRIu64
",%"
PRIu64
",%"
PRIu64
printf
(
"%"
PRIu64
",%s,%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
,
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
",%"
PRIu64
,
...
@@ -554,6 +537,143 @@ static void ct_realloc(int active_cnt)
...
@@ -554,6 +537,143 @@ static void ct_realloc(int active_cnt)
}
}
}
}
#define LXC_MAINLOOP_CONTINUE 0
#define LXC_MAINLOOP_CLOSE 1
struct
lxc_epoll_descr
{
int
epfd
;
struct
lxc_list
handlers
;
};
typedef
int
(
*
lxc_mainloop_callback_t
)(
int
fd
,
uint32_t
event
,
void
*
data
,
struct
lxc_epoll_descr
*
descr
);
struct
mainloop_handler
{
lxc_mainloop_callback_t
callback
;
int
fd
;
void
*
data
;
};
#define MAX_EVENTS 10
int
lxc_mainloop
(
struct
lxc_epoll_descr
*
descr
,
int
timeout_ms
)
{
int
i
,
nfds
,
ret
;
struct
mainloop_handler
*
handler
;
struct
epoll_event
events
[
MAX_EVENTS
];
for
(;;)
{
nfds
=
epoll_wait
(
descr
->
epfd
,
events
,
MAX_EVENTS
,
timeout_ms
);
if
(
nfds
<
0
)
{
if
(
errno
==
EINTR
)
continue
;
return
-
1
;
}
for
(
i
=
0
;
i
<
nfds
;
i
++
)
{
handler
=
events
[
i
].
data
.
ptr
;
/* If the handler returns a positive value, exit the
* mainloop.
*/
ret
=
handler
->
callback
(
handler
->
fd
,
events
[
i
].
events
,
handler
->
data
,
descr
);
if
(
ret
==
LXC_MAINLOOP_CLOSE
)
return
0
;
}
if
(
nfds
==
0
)
return
0
;
if
(
lxc_list_empty
(
&
descr
->
handlers
))
return
0
;
}
}
int
lxc_mainloop_open
(
struct
lxc_epoll_descr
*
descr
)
{
/* hint value passed to epoll create */
descr
->
epfd
=
epoll_create1
(
EPOLL_CLOEXEC
);
if
(
descr
->
epfd
<
0
)
return
-
1
;
lxc_list_init
(
&
descr
->
handlers
);
return
0
;
}
int
lxc_mainloop_add_handler
(
struct
lxc_epoll_descr
*
descr
,
int
fd
,
lxc_mainloop_callback_t
callback
,
void
*
data
)
{
struct
epoll_event
ev
;
struct
mainloop_handler
*
handler
;
struct
lxc_list
*
item
;
handler
=
malloc
(
sizeof
(
*
handler
));
if
(
!
handler
)
return
-
1
;
handler
->
callback
=
callback
;
handler
->
fd
=
fd
;
handler
->
data
=
data
;
ev
.
events
=
EPOLLIN
;
ev
.
data
.
ptr
=
handler
;
if
(
epoll_ctl
(
descr
->
epfd
,
EPOLL_CTL_ADD
,
fd
,
&
ev
)
<
0
)
goto
out_free_handler
;
item
=
malloc
(
sizeof
(
*
item
));
if
(
!
item
)
goto
out_free_handler
;
item
->
elem
=
handler
;
lxc_list_add
(
&
descr
->
handlers
,
item
);
return
0
;
out_free_handler:
free
(
handler
);
return
-
1
;
}
int
lxc_mainloop_close
(
struct
lxc_epoll_descr
*
descr
)
{
struct
lxc_list
*
iterator
,
*
next
;
iterator
=
descr
->
handlers
.
next
;
while
(
iterator
!=
&
descr
->
handlers
)
{
next
=
iterator
->
next
;
lxc_list_del
(
iterator
);
free
(
iterator
->
elem
);
free
(
iterator
);
iterator
=
next
;
}
if
(
descr
->
epfd
>=
0
)
return
close
(
descr
->
epfd
);
return
0
;
}
static
int
stdin_handler
(
int
fd
,
uint32_t
events
,
void
*
data
,
struct
lxc_epoll_descr
*
descr
)
{
char
*
in_char
=
data
;
if
(
events
&
EPOLLIN
)
{
int
rc
;
rc
=
read
(
fd
,
in_char
,
sizeof
(
*
in_char
));
if
(
rc
<=
0
)
*
in_char
=
'\0'
;
}
if
(
events
&
EPOLLHUP
)
*
in_char
=
'q'
;
return
1
;
}
int
main
(
int
argc
,
char
*
argv
[])
int
main
(
int
argc
,
char
*
argv
[])
{
{
struct
lxc_epoll_descr
descr
;
struct
lxc_epoll_descr
descr
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment