forked from TrueCloudLab/rclone
fs: Allow semicolons as well as spaces in --bwlimit timetable parsing - fixes #7595
This commit is contained in:
parent
471531eb6a
commit
d4b29fef92
4 changed files with 65 additions and 3 deletions
|
@ -123,7 +123,7 @@ rclone [flags]
|
||||||
--box-token-url string Token server url
|
--box-token-url string Token server url
|
||||||
--box-upload-cutoff SizeSuffix Cutoff for switching to multipart upload (>= 50 MiB) (default 50Mi)
|
--box-upload-cutoff SizeSuffix Cutoff for switching to multipart upload (>= 50 MiB) (default 50Mi)
|
||||||
--buffer-size SizeSuffix In memory buffer size when reading files for each --transfer (default 16Mi)
|
--buffer-size SizeSuffix In memory buffer size when reading files for each --transfer (default 16Mi)
|
||||||
--bwlimit BwTimetable Bandwidth limit in KiB/s, or use suffix B|K|M|G|T|P or a full timetable
|
--bwlimit BwTimetable Bandwidth limit in KiB/s, or use suffix B|K|M|G|T|P or a full timetable.
|
||||||
--bwlimit-file BwTimetable Bandwidth limit per file in KiB/s, or use suffix B|K|M|G|T|P or a full timetable
|
--bwlimit-file BwTimetable Bandwidth limit per file in KiB/s, or use suffix B|K|M|G|T|P or a full timetable
|
||||||
--ca-cert stringArray CA certificate used to verify servers
|
--ca-cert stringArray CA certificate used to verify servers
|
||||||
--cache-chunk-clean-interval Duration How often should the cache perform cleanups of the chunk storage (default 1m0s)
|
--cache-chunk-clean-interval Duration How often should the cache perform cleanups of the chunk storage (default 1m0s)
|
||||||
|
|
|
@ -724,12 +724,20 @@ for upload:download, e.g.`10M:1M`.
|
||||||
characters. It is optional.
|
characters. It is optional.
|
||||||
- `HH:MM` is an hour from 00:00 to 23:59.
|
- `HH:MM` is an hour from 00:00 to 23:59.
|
||||||
|
|
||||||
|
Entries can be separated by spaces or semicolons.
|
||||||
|
|
||||||
|
**Note:** Semicolons can be used as separators instead of spaces to avoid parsing issues in environments like Docker.
|
||||||
|
|
||||||
An example of a typical timetable to avoid link saturation during daytime
|
An example of a typical timetable to avoid link saturation during daytime
|
||||||
working hours could be:
|
working hours could be:
|
||||||
|
|
||||||
|
Using spaces as separators:
|
||||||
`--bwlimit "08:00,512k 12:00,10M 13:00,512k 18:00,30M 23:00,off"`
|
`--bwlimit "08:00,512k 12:00,10M 13:00,512k 18:00,30M 23:00,off"`
|
||||||
|
|
||||||
In this example, the transfer bandwidth will be set to 512 KiB/s
|
Using semicolons as separators:
|
||||||
|
`--bwlimit "08:00,512k;12:00,10M;13:00,512k;18:00,30M;23:00,off"`
|
||||||
|
|
||||||
|
In these examples, the transfer bandwidth will be set to 512 KiB/s
|
||||||
at 8am every day. At noon, it will rise to 10 MiB/s, and drop back
|
at 8am every day. At noon, it will rise to 10 MiB/s, and drop back
|
||||||
to 512 KiB/sec at 1pm. At 6pm, the bandwidth limit will be set to
|
to 512 KiB/sec at 1pm. At 6pm, the bandwidth limit will be set to
|
||||||
30 MiB/s, and at 11pm it will be completely disabled (full speed).
|
30 MiB/s, and at 11pm it will be completely disabled (full speed).
|
||||||
|
@ -737,8 +745,12 @@ Anything between 11pm and 8am will remain unlimited.
|
||||||
|
|
||||||
An example of timetable with `WEEKDAY` could be:
|
An example of timetable with `WEEKDAY` could be:
|
||||||
|
|
||||||
|
Using spaces as separators:
|
||||||
`--bwlimit "Mon-00:00,512 Fri-23:59,10M Sat-10:00,1M Sun-20:00,off"`
|
`--bwlimit "Mon-00:00,512 Fri-23:59,10M Sat-10:00,1M Sun-20:00,off"`
|
||||||
|
|
||||||
|
Using semicolons as separators:
|
||||||
|
`--bwlimit "Mon-00:00,512;Fri-23:59,10M;Sat-10:00,1M;Sun-20:00,off"`
|
||||||
|
|
||||||
It means that, the transfer bandwidth will be set to 512 KiB/s on
|
It means that, the transfer bandwidth will be set to 512 KiB/s on
|
||||||
Monday. It will rise to 10 MiB/s before the end of Friday. At 10:00
|
Monday. It will rise to 10 MiB/s before the end of Friday. At 10:00
|
||||||
on Saturday it will be set to 1 MiB/s. From 20:00 on Sunday it will
|
on Saturday it will be set to 1 MiB/s. From 20:00 on Sunday it will
|
||||||
|
|
|
@ -150,7 +150,10 @@ func (x *BwTimetable) Set(s string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tok := range strings.Split(s, " ") {
|
// Split the timetable string by both spaces and semicolons
|
||||||
|
for _, tok := range strings.FieldsFunc(s, func(r rune) bool {
|
||||||
|
return r == ' ' || r == ';'
|
||||||
|
}) {
|
||||||
tv := strings.Split(tok, ",")
|
tv := strings.Split(tok, ",")
|
||||||
|
|
||||||
// Format must be dayOfWeek-HH:MM,BW
|
// Format must be dayOfWeek-HH:MM,BW
|
||||||
|
|
|
@ -256,6 +256,53 @@ func TestBwTimetableSet(t *testing.T) {
|
||||||
false,
|
false,
|
||||||
"Mon-00:00,512Ki Sun-12:00,1Mi Mon-12:00,1Mi Tue-12:00,1Mi Wed-12:00,1Mi Thu-12:00,1Mi Fri-12:00,1Mi Sat-12:00,1Mi Sun-20:00,off",
|
"Mon-00:00,512Ki Sun-12:00,1Mi Mon-12:00,1Mi Tue-12:00,1Mi Wed-12:00,1Mi Thu-12:00,1Mi Fri-12:00,1Mi Sat-12:00,1Mi Sun-20:00,off",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"11:00,333;13:40,666;23:50,10M;23:59,off",
|
||||||
|
BwTimetable{
|
||||||
|
BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 0, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 1, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 3, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 4, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 5, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 6, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 0, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 1, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 2, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 3, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 4, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 5, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 6, HHMM: 2359, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
"Sun-11:00,333Ki Mon-11:00,333Ki Tue-11:00,333Ki Wed-11:00,333Ki Thu-11:00,333Ki Fri-11:00,333Ki Sat-11:00,333Ki Sun-13:40,666Ki Mon-13:40,666Ki Tue-13:40,666Ki Wed-13:40,666Ki Thu-13:40,666Ki Fri-13:40,666Ki Sat-13:40,666Ki Sun-23:50,10Mi Mon-23:50,10Mi Tue-23:50,10Mi Wed-23:50,10Mi Thu-23:50,10Mi Fri-23:50,10Mi Sat-23:50,10Mi Sun-23:59,off Mon-23:59,off Tue-23:59,off Wed-23:59,off Thu-23:59,off Fri-23:59,off Sat-23:59,off",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Mon-11:00,333;Tue-13:40,666:333;Fri-00:00,10M;Sat-10:00,off;Sun-23:00,666",
|
||||||
|
BwTimetable{
|
||||||
|
BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: BwPair{Tx: 333 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 333 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: BwPair{Tx: 10 * 1024 * 1024, Rx: 10 * 1024 * 1024}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 6, HHMM: 1000, Bandwidth: BwPair{Tx: -1, Rx: -1}},
|
||||||
|
BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: BwPair{Tx: 666 * 1024, Rx: 666 * 1024}},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
"Mon-11:00,333Ki Tue-13:40,666Ki:333Ki Fri-00:00,10Mi Sat-10:00,off Sun-23:00,666Ki",
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
tt := BwTimetable{}
|
tt := BwTimetable{}
|
||||||
err := tt.Set(test.in)
|
err := tt.Set(test.in)
|
||||||
|
|
Loading…
Reference in a new issue