Skip to content

Commit 436c9c6

Browse files
authored
Merge pull request #217 from gportay/http-log-level
Propagate log-level to protocol helpers
2 parents da7fafe + 0c55388 commit 436c9c6

File tree

6 files changed

+108
-6
lines changed

6 files changed

+108
-6
lines changed

src/caremote.c

+22
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ struct CaRemote {
5858
int input_fd;
5959
int output_fd;
6060

61+
int log_level;
6162
uint64_t rate_limit_bps;
6263

6364
ReallocBuffer input_buffer;
@@ -112,6 +113,7 @@ CaRemote* ca_remote_new(void) {
112113
rr->local_feature_flags = UINT64_MAX;
113114
rr->remote_feature_flags = UINT64_MAX;
114115

116+
rr->log_level = -1;
115117
rr->rate_limit_bps = UINT64_MAX;
116118

117119
rr->digest_type = _CA_DIGEST_TYPE_INVALID;
@@ -228,6 +230,15 @@ CaRemote* ca_remote_unref(CaRemote *rr) {
228230
return mfree(rr);
229231
}
230232

233+
int ca_remote_set_log_level(CaRemote *rr, int log_level) {
234+
if (!rr)
235+
return -EINVAL;
236+
237+
rr->log_level = log_level;
238+
239+
return 0;
240+
}
241+
231242
int ca_remote_set_rate_limit_bps(CaRemote *rr, uint64_t rate_limit_bps) {
232243
if (!rr)
233244
return -EINVAL;
@@ -984,6 +995,9 @@ static int ca_remote_start(CaRemote *rr) {
984995

985996
argc = (rr->callout ? 1 : 3) + 5 + strv_length(rr->rstore_urls);
986997

998+
if (rr->log_level != -1)
999+
argc++;
1000+
9871001
if (rr->rate_limit_bps != UINT64_MAX)
9881002
argc++;
9891003

@@ -1016,6 +1030,14 @@ static int ca_remote_start(CaRemote *rr) {
10161030
args[i++] = (char*) remote_casync;
10171031
}
10181032

1033+
if (rr->log_level != -1) {
1034+
r = asprintf(args + i, "--log-level=%i", rr->log_level);
1035+
if (r < 0)
1036+
return log_oom();
1037+
1038+
i++;
1039+
}
1040+
10191041
if (rr->rate_limit_bps != UINT64_MAX) {
10201042
r = asprintf(args + i, "--rate-limit-bps=%" PRIu64, rr->rate_limit_bps);
10211043
if (r < 0)

src/caremote.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ int ca_remote_get_remote_feature_flags(CaRemote *rr, uint64_t* flags);
5050
int ca_remote_set_digest_type(CaRemote *rr, CaDigestType type);
5151
int ca_remote_get_digest_type(CaRemote *rr, CaDigestType *ret);
5252

53+
int ca_remote_set_log_level(CaRemote *rr, int log_level);
5354
int ca_remote_set_rate_limit_bps(CaRemote *rr, uint64_t rate_limit_bps);
5455

5556
int ca_remote_set_io_fds(CaRemote *rr, int input_fd, int output_fd);

src/casync-http.c

+31-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
static volatile sig_atomic_t quit = false;
1515

16+
static int arg_log_level = -1;
1617
static bool arg_verbose = false;
1718
static curl_off_t arg_rate_limit_bps = 0;
1819

@@ -470,7 +471,11 @@ static int run(int argc, char *argv[]) {
470471
}
471472
}
472473

473-
/* (void) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); */
474+
if (curl_easy_setopt(curl, CURLOPT_VERBOSE, arg_log_level > 4)) {
475+
log_error("Failed to set CURL verbosity.");
476+
r = -EIO;
477+
goto finish;
478+
}
474479

475480
if (archive_url) {
476481
r = acquire_file(rr, curl, archive_url, write_archive);
@@ -540,7 +545,7 @@ static int run(int argc, char *argv[]) {
540545
}
541546

542547
if (curl_easy_setopt(curl, CURLOPT_URL, url_buffer) != CURLE_OK) {
543-
log_error("Failed to set CURL URL to: %s", index_url);
548+
log_error("Failed to set CURL URL to: %s", url_buffer);
544549
r = -EIO;
545550
goto finish;
546551
}
@@ -571,6 +576,12 @@ static int run(int argc, char *argv[]) {
571576
}
572577
}
573578

579+
if (curl_easy_setopt(curl, CURLOPT_VERBOSE, arg_log_level > 4)) {
580+
log_error("Failed to set CURL verbosity.");
581+
r = -EIO;
582+
goto finish;
583+
}
584+
574585
log_debug("Acquiring %s...", url_buffer);
575586

576587
if (robust_curl_easy_perform(curl) != CURLE_OK) {
@@ -641,14 +652,19 @@ static void help(void) {
641652

642653
static int parse_argv(int argc, char *argv[]) {
643654

655+
enum {
656+
ARG_RATE_LIMIT_BPS = 0x100,
657+
};
658+
644659
static const struct option options[] = {
645660
{ "help", no_argument, NULL, 'h' },
661+
{ "log-level", required_argument, NULL, 'l' },
646662
{ "verbose", no_argument, NULL, 'v' },
647-
{ "rate-limit-bps", required_argument, NULL, 'l' },
663+
{ "rate-limit-bps", required_argument, NULL, ARG_RATE_LIMIT_BPS },
648664
{}
649665
};
650666

651-
int c;
667+
int c, r;
652668

653669
assert(argc >= 0);
654670
assert(argv);
@@ -669,19 +685,28 @@ static int parse_argv(int argc, char *argv[]) {
669685
if (getenv_bool("CASYNC_VERBOSE") > 0)
670686
arg_verbose = true;
671687

672-
while ((c = getopt_long(argc, argv, "hv", options, NULL)) >= 0) {
688+
while ((c = getopt_long(argc, argv, "hl:v", options, NULL)) >= 0) {
673689

674690
switch (c) {
675691

676692
case 'h':
677693
help();
678694
return 0;
679695

696+
case 'l':
697+
r = set_log_level_from_string(optarg);
698+
if (r < 0)
699+
return log_error_errno(r, "Failed to parse log level \"%s\": %m", optarg);
700+
701+
arg_log_level = r;
702+
703+
break;
704+
680705
case 'v':
681706
arg_verbose = true;
682707
break;
683708

684-
case 'l':
709+
case ARG_RATE_LIMIT_BPS:
685710
arg_rate_limit_bps = strtoll(optarg, NULL, 10);
686711
break;
687712

src/casync-tool.c

+36
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,12 @@ static int verb_make(int argc, char *argv[]) {
13181318
if (r < 0)
13191319
return r;
13201320

1321+
if (arg_log_level != -1) {
1322+
r = ca_sync_set_log_level(s, arg_log_level);
1323+
if (r < 0)
1324+
return log_error_errno(r, "Failed to set log level: %m");
1325+
}
1326+
13211327
if (arg_rate_limit_bps != UINT64_MAX) {
13221328
r = ca_sync_set_rate_limit_bps(s, arg_rate_limit_bps);
13231329
if (r < 0)
@@ -1617,6 +1623,12 @@ static int verb_extract(int argc, char *argv[]) {
16171623
}
16181624
}
16191625

1626+
if (arg_log_level != -1) {
1627+
r = ca_sync_set_log_level(s, arg_log_level);
1628+
if (r < 0)
1629+
return log_error_errno(r, "Failed to set log level: %m");
1630+
}
1631+
16201632
if (arg_rate_limit_bps != UINT64_MAX) {
16211633
r = ca_sync_set_rate_limit_bps(s, arg_rate_limit_bps);
16221634
if (r < 0)
@@ -2772,6 +2784,12 @@ static int verb_mount(int argc, char *argv[]) {
27722784
return r;
27732785
}
27742786

2787+
if (arg_log_level != -1) {
2788+
r = ca_sync_set_log_level(s, arg_log_level);
2789+
if (r < 0)
2790+
return log_error_errno(r, "Failed to set log level: %m");
2791+
}
2792+
27752793
if (arg_rate_limit_bps != UINT64_MAX) {
27762794
r = ca_sync_set_rate_limit_bps(s, arg_rate_limit_bps);
27772795
if (r < 0)
@@ -2892,6 +2910,12 @@ static int verb_mkdev(int argc, char *argv[]) {
28922910
goto finish;
28932911
}
28942912

2913+
if (arg_log_level != -1) {
2914+
r = ca_sync_set_log_level(s, arg_log_level);
2915+
if (r < 0)
2916+
return log_error_errno(r, "Failed to set log level: %m");
2917+
}
2918+
28952919
if (arg_rate_limit_bps != UINT64_MAX) {
28962920
r = ca_sync_set_rate_limit_bps(s, arg_rate_limit_bps);
28972921
if (r < 0)
@@ -3453,6 +3477,12 @@ static int verb_pull(int argc, char *argv[]) {
34533477
if (r < 0)
34543478
return log_error_errno(r, "Failed to set feature flags: %m");
34553479

3480+
if (arg_log_level != -1) {
3481+
r = ca_remote_set_log_level(rr, arg_log_level);
3482+
if (r < 0)
3483+
return log_error_errno(r, "Failed to set log level: %m");
3484+
}
3485+
34563486
if (arg_rate_limit_bps != UINT64_MAX) {
34573487
r = ca_remote_set_rate_limit_bps(rr, arg_rate_limit_bps);
34583488
if (r < 0)
@@ -3606,6 +3636,12 @@ static int verb_push(int argc, char *argv[]) {
36063636
if (r < 0)
36073637
log_error_errno(r, "Failed to set feature flags: %m");
36083638

3639+
if (arg_log_level != -1) {
3640+
r = ca_remote_set_log_level(rr, arg_log_level);
3641+
if (r < 0)
3642+
return log_error_errno(r, "Failed to set log level: %m");
3643+
}
3644+
36093645
if (arg_rate_limit_bps != UINT64_MAX) {
36103646
r = ca_remote_set_rate_limit_bps(rr, arg_rate_limit_bps);
36113647
if (r < 0)

src/casync.c

+17
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ struct CaSync {
110110
bool archive_eof;
111111
bool remote_index_eof;
112112

113+
int log_level;
113114
size_t rate_limit_bps;
114115

115116
uint64_t feature_flags;
@@ -169,6 +170,7 @@ static CaSync *ca_sync_new(void) {
169170

170171
s->chunker = (CaChunker) CA_CHUNKER_INIT;
171172

173+
s->log_level = -1;
172174
s->archive_size = UINT64_MAX;
173175
s->punch_holes = true;
174176
s->reflink = true;
@@ -511,6 +513,15 @@ CaSync *ca_sync_unref(CaSync *s) {
511513
return mfree(s);
512514
}
513515

516+
int ca_sync_set_log_level(CaSync *s, int log_level) {
517+
if (!s)
518+
return -EINVAL;
519+
520+
s->log_level = log_level;
521+
522+
return 0;
523+
}
524+
514525
int ca_sync_set_rate_limit_bps(CaSync *s, uint64_t rate_limit_bps) {
515526
if (!s)
516527
return -EINVAL;
@@ -671,6 +682,12 @@ int ca_sync_set_index_remote(CaSync *s, const char *url) {
671682
if (!s->remote_index)
672683
return -ENOMEM;
673684

685+
if (s->log_level != -1) {
686+
r = ca_remote_set_log_level(s->remote_index, s->log_level);
687+
if (r < 0)
688+
return r;
689+
}
690+
674691
if (s->rate_limit_bps > 0) {
675692
r = ca_remote_set_rate_limit_bps(s->remote_index, s->rate_limit_bps);
676693
if (r < 0)

src/casync.h

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ CaSync *ca_sync_new_decode(void);
3131
CaSync *ca_sync_unref(CaSync *sync);
3232
DEFINE_TRIVIAL_CLEANUP_FUNC(CaSync *, ca_sync_unref);
3333

34+
int ca_sync_set_log_level(CaSync *s, int log_level);
3435
int ca_sync_set_rate_limit_bps(CaSync *s, uint64_t rate_limit_bps);
3536

3637
int ca_sync_set_feature_flags(CaSync *s, uint64_t flags);

0 commit comments

Comments
 (0)