<title>Range header</title>
<para>
- <option>Range: entries=<replaceable>cursor</replaceable>[[:<replaceable>num_skip</replaceable>]:<replaceable>num_entries</replaceable>]</option>
+ <option>Range: entries=[<replaceable>cursor</replaceable>][[:<replaceable>num_skip</replaceable>]:[<replaceable>num_entries</replaceable>]]</option>
</para>
<para>
<option>Range: realtime=[<replaceable>since</replaceable>]:[<replaceable>until</replaceable>][[:<replaceable>num_skip</replaceable>]:<replaceable>num_entries</replaceable>]</option>
</para>
<para>where
- <replaceable>cursor</replaceable> is a cursor string,
+ <replaceable>cursor</replaceable> is a cursor string, defaults to the first entry,
<replaceable>since</replaceable> and <replaceable>until</replaceable> are timestamps (seconds since 1970-01-01 00:00:00 UTC),
<replaceable>num_skip</replaceable> is an integer,
<replaceable>num_entries</replaceable> is an unsigned integer.
</para>
<para>Range defaults to all available events.</para>
+
+ <para>If <replaceable>num_skip</replaceable> is negative and no <replaceable>cursor</replaceable> is
+ given, the last entry will be the reference point.</para>
</refsect1>
<refsect1>
<varlistentry>
<term><uri>follow</uri></term>
- <listitem><para>wait for new events
- (like <command>journalctl --follow</command>, except that
- the number of events returned is not limited).</para>
+ <listitem><para>wait for new events (like <command>journalctl --follow</command>, the number of
+ events returned is not limited, unless <replaceable>num_entries</replaceable> is specified in the
+ <replaceable>Range</replaceable> header).</para>
<xi:include href="version-info.xml" xpointer="v197"/>
</listitem>
}
p = (colon2 ?: colon) + 1;
- r = safe_atou64(p, &m->n_entries);
- if (r < 0)
- return r;
+ if (!isempty(p)) {
+ r = safe_atou64(p, &m->n_entries);
+ if (r < 0)
+ return r;
- if (m->n_entries <= 0)
- return -EINVAL;
+ if (m->n_entries <= 0)
+ return -EINVAL;
- m->n_entries_set = true;
+ m->n_entries_set = true;
+ }
return 0;
}
--header "Range: entries=$BOOT_CURSOR:5:10" \
http://localhost:19531/entries >"$LOG_FILE"
jq -se "length == 10" "$LOG_FILE"
+# Check that follow with no num_entries follows "indefinitely"
+(
+ set +e; \
+ timeout 5 curl -LSfs \
+ --header "Accept: application/json" \
+ --header "Range: entries=:-1:" \
+ http://localhost:19531/entries?follow >"$LOG_FILE" ; \
+ test $? -eq 124 # timeout should kill the curl process waiting for new entries
+)
+# Check that follow with num_entries returns the specified number of entries and exits
+timeout 5 curl -LSfs \
+ --header "Accept: application/json" \
+ --header "Range: entries=:-20:10" \
+ http://localhost:19531/entries?follow >"$LOG_FILE"
+jq -se "length == 10" "$LOG_FILE"
# Check if the specified cursor refers to an existing entry and return just that entry
curl -LSfs \
--header "Accept: application/json" \