Skip to content

Commit 51bf96d

Browse files
docker_wrapper: don't log ps and stats commands by default
These are periodic (10 sec) and flood stderr. By default log only one-time commands (start/stop). To log nothing, put 'verbose = 0' in job.toml. To log all commands, use 'verbose = 2'.
1 parent 61ec139 commit 51bf96d

3 files changed

Lines changed: 33 additions & 28 deletions

File tree

lib/util.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -710,9 +710,7 @@ string parse_ldd_libc(const char* input) {
710710
// On Win this requires connecting to a shell in the WSL distro
711711
//
712712
#ifdef _WIN32
713-
int DOCKER_CONN::init(
714-
WSL_DISTRO &wd, bool _verbose
715-
) {
713+
int DOCKER_CONN::init(WSL_DISTRO &wd) {
716714
string err_msg;
717715
type = wd.docker_type;
718716
cli_prog = docker_cli_prog(wd.docker_type);
@@ -730,22 +728,22 @@ int DOCKER_CONN::init(
730728
);
731729
return -1;
732730
}
733-
verbose = _verbose;
734731
return 0;
735732
}
736733
#else
737-
int DOCKER_CONN::init(DOCKER_TYPE docker_type, bool _verbose) {
734+
int DOCKER_CONN::init(DOCKER_TYPE docker_type) {
738735
type = docker_type;
739736
cli_prog = docker_cli_prog(docker_type);
740-
verbose = _verbose;
741737
return 0;
742738
}
743739
#endif
744740

745741
// issue a Docker command and return its output (stdout + stderr)
746742
// as a vector of lines (\n-terminated)
747743
//
748-
int DOCKER_CONN::command(const char* cmd, vector<string> &out) {
744+
int DOCKER_CONN::command(
745+
const char* cmd, vector<string> &out, bool verbose
746+
) {
749747
char buf[1024];
750748
int retval;
751749
if (verbose) {
@@ -775,9 +773,7 @@ int DOCKER_CONN::command(const char* cmd, vector<string> &out) {
775773
);
776774
retval = run_command(buf, out);
777775
if (retval) {
778-
if (verbose) {
779-
fprintf(stderr, "command failed: %s\n", boincerror(retval));
780-
}
776+
fprintf(stderr, "command failed: %s\n", boincerror(retval));
781777
return retval;
782778
}
783779
#endif // _WIN32

lib/util.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,13 @@ extern double simtime;
152152
struct DOCKER_CONN {
153153
DOCKER_TYPE type;
154154
const char* cli_prog;
155-
bool verbose;
156155
#ifdef _WIN32
157156
WSL_CMD ctl_wc;
158-
int init(WSL_DISTRO&, bool verbose=false);
157+
int init(WSL_DISTRO&);
159158
#else
160-
int init(DOCKER_TYPE, bool verbose=false);
159+
int init(DOCKER_TYPE);
161160
#endif
162-
int command(const char* cmd, std::vector<std::string> &out);
161+
int command(const char* cmd, std::vector<std::string> &out, bool verbose);
163162

164163
static const int CMD_TIMEOUT = 600;
165164
// timeout for docker commands.

samples/docker_wrapper/docker_wrapper.cpp

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ struct RSC_USAGE {
167167
};
168168

169169
// verbosity levels
170+
#define VERBOSE_NONE 0
170171
#define VERBOSE_STD 1
171172
// include only start/pause/end commands
172173
#define VERBOSE_ALL 2
@@ -188,7 +189,7 @@ struct CONFIG {
188189
// additional args for docker build command
189190
string create_args;
190191
// additional args for docker create command
191-
int verbose;
192+
int verbose; // see above
192193
bool use_gpu;
193194
// tell Docker to enable GPU access
194195
int web_graphics_guest_port;
@@ -242,12 +243,21 @@ DOCKER_TYPE docker_type;
242243
string wsl_distro_name;
243244
double cpu_time = 0;
244245

246+
inline bool verbose_std() {
247+
return config.verbose >= VERBOSE_STD;
248+
}
249+
250+
inline bool verbose_all() {
251+
return config.verbose >= VERBOSE_ALL;
252+
}
253+
245254
// parse job config file (job.toml)
246255
//
247256
int parse_config_file() {
248257
// defaults
249258
config.workdir = "/app";
250259
config.use_gpu = false;
260+
config.verbose = VERBOSE_STD;
251261

252262
std::ifstream ifs(config_file);
253263
if (ifs.fail()) {
@@ -401,7 +411,7 @@ void get_image_name() {
401411
int image_exists(bool &exists) {
402412
vector<string> out;
403413

404-
int retval = docker_conn.command("images", out);
414+
int retval = docker_conn.command("images", out, verbose_std());
405415
if (retval) return retval;
406416
string image_name_space = image_name + string(" ");
407417
for (string line: out) {
@@ -420,7 +430,7 @@ int build_image() {
420430
snprintf(cmd, sizeof(cmd), "build \"%s\" -t %s -f %s %s",
421431
escaped_cwd, image_name, dockerfile, config.build_args.c_str()
422432
);
423-
int retval = docker_conn.command(cmd, out);
433+
int retval = docker_conn.command(cmd, out, verbose_std());
424434
if (retval) return retval;
425435
return 0;
426436
}
@@ -473,7 +483,7 @@ int get_container_state(int &state) {
473483

474484
container_name
475485
);
476-
retval = docker_conn.command(cmd, out);
486+
retval = docker_conn.command(cmd, out, verbose_all());
477487
if (retval) return retval;
478488
for (string line: out) {
479489
char buf[256];
@@ -606,7 +616,7 @@ int create_container() {
606616

607617
strcat(cmd, " ");
608618
strcat(cmd, image_name);
609-
retval = docker_conn.command(cmd, out);
619+
retval = docker_conn.command(cmd, out, verbose_std());
610620
if (retval) {
611621
fprintf(stderr, "create command failed: %d\n", retval);
612622
return retval;
@@ -627,7 +637,7 @@ int container_op(const char *op) {
627637
char cmd[1024];
628638
vector<string> out;
629639
snprintf(cmd, sizeof(cmd), "%s %s", op, container_name);
630-
int retval = docker_conn.command(cmd, out);
640+
int retval = docker_conn.command(cmd, out, verbose_std());
631641
if (retval) {
632642
fprintf(stderr, "%s command failed: %d\n", op, retval);
633643
return retval;
@@ -648,21 +658,21 @@ void cleanup() {
648658
vector<string> out;
649659

650660
snprintf(cmd, sizeof(cmd), "logs %s", container_name);
651-
docker_conn.command(cmd, out);
661+
docker_conn.command(cmd, out, verbose_std());
652662
fprintf(stderr, "stderr from container:\n");
653663
for (string line: out) {
654664
fprintf(stderr, "%s", line.c_str());
655665
}
656666
fprintf(stderr, "stderr end\n");
657667

658668
snprintf(cmd, sizeof(cmd), "container rm %s", container_name);
659-
docker_conn.command(cmd, out);
669+
docker_conn.command(cmd, out, verbose_std());
660670

661671
// don't remove image if it was specified in config
662672
//
663673
if (config.image_name.empty()) {
664674
snprintf(cmd, sizeof(cmd), "image rm %s", image_name);
665-
docker_conn.command(cmd, out);
675+
docker_conn.command(cmd, out, verbose_std());
666676
}
667677
}
668678

@@ -732,7 +742,7 @@ JOB_STATUS poll_app() {
732742
int retval;
733743

734744
snprintf(cmd, sizeof(cmd), "ps --all -f \"name=%s\"", container_name);
735-
retval = docker_conn.command(cmd, out);
745+
retval = docker_conn.command(cmd, out, verbose_all());
736746
if (retval) return JOB_FAIL;
737747
for (string line: out) {
738748
if (strstr(line.c_str(), container_name)) {
@@ -773,7 +783,7 @@ int get_stats(RSC_USAGE &ru) {
773783
container_name
774784
);
775785
#endif
776-
retval = docker_conn.command(cmd, out);
786+
retval = docker_conn.command(cmd, out, verbose_all());
777787
if (retval) return -1;
778788
if (out.empty()) return -1;
779789

@@ -857,7 +867,7 @@ int wsl_init() {
857867
fprintf(stderr, "Using WSL distro %s\n", dp->distro_name.c_str());
858868
wsl_distro_name = dp->distro_name;
859869
docker_type = dp->docker_type;
860-
return docker_conn.init(*dp, config.verbose>0);
870+
return docker_conn.init(*dp);
861871
}
862872
#endif
863873

@@ -894,7 +904,7 @@ int main(int argc, char** argv) {
894904
if (!strcmp(argv[j], "--sporadic")) {
895905
sporadic = true;
896906
} else if (!strcmp(argv[j], "--verbose")) {
897-
config.verbose = VERBOSE_STD;
907+
config.verbose = VERBOSE_ALL;
898908
} else if (!strcmp(argv[j], "--config")) {
899909
config_file = argv[++j];
900910
} else if (!strcmp(argv[j], "--dockerfile")) {
@@ -977,7 +987,7 @@ int main(int argc, char** argv) {
977987
}
978988
docker_type = aid.host_info.docker_type;
979989
}
980-
retval = docker_conn.init(docker_type, config.verbose>0);
990+
retval = docker_conn.init(docker_type);
981991
if (retval) {
982992
fprintf(stderr, "docker_conn.init() failed: %d\n", retval);
983993
boinc_finish(1);

0 commit comments

Comments
 (0)