==============
gatherer specs
==============
WORK IN PROGRESS
When a command is expected, the line "#X#" is printed, where X is the number of
the request, starting a 0 and incremented after each processed request.
Requests are spanned on multiple lines. The first line is the command, the
following lines are parameters (one parameter per line unless stated otherwise).
Requests are all blocking. As they are read from stdin using readline(),
they can be buffered in stdin.
When the number of parameters or returns is variable, it should be indicated
first.
When a parameter or returned value is not one line of printable characters,
its length as returned by len() should be indicated first.
When gatherer is expected to write in a file, its parent directory should exist
and it will be opened with the "w" flag (unless stated otherwise).
No timeout handling should be implemented in gatherer.
SIGINT should be handled and:
- stop the current request, write INTERRUPTED to stderr then continue the normal
flow of execution when a request is being handled,
- be treated as an 'exit' request is a command was being read
- be treated as a 'reset' if a command was already read, but the request is
still being read. The current request should be dropped and a new request
should be read, the request counter is not incremented as no request was
processed.
stderr is used:
- by Python to display exceptions;
- to print "ALIVE" when SIGUSR1 is received or after a "ping" request;
- to print "UNKNOWN COMMAND" when a command is unknown;
- to print "INTERRUPTED" when a command is interrupted with SIGINT.
Requests
--------
Command: "noop"
Params:
- None
Action:
- None
Returns:
- Nothing
Command: "ping"
Params:
- None
Action:
- Prints "ALIVE" on stderr
Returns:
- Nothing
Command: "exit"
Params:
- None
Action:
- The gatherer process returns 0
Returns:
- Nothing
Command: "glob"
Params:
- The globbing pattern
Action:
- Performs a glob.glob()
Returns:
- On the first line, a number of results, n
- On the following n lines, filenames, line by line
Command: "exec"
Params:
- The command to send to a shell
Action:
- Executes the command in a shell using subprocess.Popen
Returns:
- The return code of the command
- The length of its stdout output as return by len(), in decimal.
- Its stdout output, followed by a trailing '\n'
- The length of its stderr output as return by len(), in decimal.
- Its stderr output, followed by a trailing '\n'
Command: "exec2file"
Params:
- The command to send to a shell
- The filename to send the standard output to
Action:
- If the command is found, it is executed with this file as stdout and stderr.
Returns:
- The return code of the command in decimal.
Command: "cp"
-- to be defined after staring at the current sosreport code.
Command: "globcp"
-- to be defined after staring at the current sosreport code.