aboutsummaryrefslogtreecommitdiff
path: root/vendor/voclient/voapps/README
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/voclient/voapps/README')
-rw-r--r--vendor/voclient/voapps/README324
1 files changed, 324 insertions, 0 deletions
diff --git a/vendor/voclient/voapps/README b/vendor/voclient/voapps/README
new file mode 100644
index 00000000..aea037b0
--- /dev/null
+++ b/vendor/voclient/voapps/README
@@ -0,0 +1,324 @@
+
+=============================
+Last Modified: Aug 10, 2012
+=============================
+
+
+ This directory contains the VOClient command-line applications.
+Key files in this directory include:
+
+ voApps.c The generic unix main() linked to all tasks
+ generic.c A template code for building VOClient apps
+
+ voatlas.c The VOATLAS multi-wavelength image atlas task
+ vodata.c The VODATA general data query retrieval task
+
+ voregistry.c The VOREGISTRY task to query/resolve Registry resources
+
+ vosesame.c The VOSESAME name resolver
+
+ vosamp.c The VOSAMP command-line SAMP tool
+
+ votcnv.c The VOTCNV votable conversion tool
+ votget.a The VOTGET task to retrieve acrefs from a votable
+ votinfo.c The VOTINFO task to print information about a votable
+ votpos.c The VOTPOS task to extract positional cols from votables
+ votsort.c The VOTSORT task to sort a votable based on a column
+ votstat.c The VOTSTAT task to print colum statistics
+
+
+ Planned tasks Not Yet Implemented:
+
+ votcat.c // VOTable Resource concatenator
+ votjoin.c // VOTable inner joins
+ votselect.c // Select rows/cols by index/expr
+ votsplit.c // Split multi-resource votables
+
+ VOClientd // C-based minimal implementation of VOClient Daeomon
+ hub // C implementation of SAMP Hub
+
+ voxmatch // Cross-compare local table and VO data
+
+ vosput // Put files to a VOSpace
+ vosget // Get files from a VOSpace
+ vosmove // Move files/nodes between VOSpaces
+ voslist // List files/nodes in a VOSpace
+ vosdelete // Delete files/nodes in a VOSpace
+
+ voskybot // List known moving objects in an image
+
+
+
+The 'lib' subdirectory contains support code for the applications. Of
+particular interest is the 'lib/voTask.c' code that defines the tasking
+interface used by the applications.
+
+
+Task Interface
+--------------
+
+ All VOClient apps are written as C procedures sharing a common signature:
+
+ <task> (int argc, char **argv, size_t *len, void **result);
+
+where 'argc' and 'argv' have the usual meaning for the CLI argument vector,
+'len' is the length of any returned object (or 0 if there is no return),
+and 'result' is a pointer to the returned object in memory. The task()
+procedure returns 0 for success, and a positive value to indicate an error
+return (this may include a signal number for a crashed child process as
+well as task-specific error return codes).
+
+ Tasks share a common main() responsible only for passing in the
+parameter options, executing the task as a connected subprocess (or by
+calling the procedure directly if the VOAPP_CONNECTED environment variable
+is defined, this is to aid in debugging) and for retrieving any returned
+result object. This architecture ensures that any memory allocated or
+threads spawned by the VOClient app do not interfere with an app using
+the language API.
+
+ Host Process App Sub-Process
+ +----------+ +----------------------+
+ | C | parameters | |
+ | main() |--------------->| VOClient |
+ | or |<---------------| application code |
+ | Lang API | result | |
+ +----------+ +----------------------+
+
+The application is spawned as a child process by the main() and the CLI
+parameters are sent over IPC. Likewise, any return value from the app is
+sent back via IPC, a host CLI tool would simply discard this result however
+a language binding or other API would then have a pointer to the result
+object it could pass up to the calling interface. The details of what can
+be returned by a task is task-specific and the caller must be aware of the
+options to be of use, for this discussion the returned 'result' is a memory
+object of size 'len' given the above calling signature.
+
+ The 'voApps.c' code contains the common main() function which normally
+calls the vo_runTask() procedure to execute the task based on the task name
+derived from a lookup table. (See lib/voTask.c for this procedure).
+
+
+
+Parameter Interface
+-------------------
+
+ VOClient apps are written to accept CLI/parameter options in a number
+of formats suited for use as Unix tasks or from an API that may be better
+suited to pass in "<param>=<value>" strings. The following formats for
+option strings are supported by all tasks:
+
+ -p param[+-] --param --param=value param=<value>
+
+For CLI tasks the following would be equivalent:
+
+ % task -p # to set the 'p' option
+ % task --param # long-form of 'p' option
+ % task --param+ # if 'param' is a boolean option
+ % task --param=value # to set a specific value for param
+ % task --param value # to set a specific value for param
+ % task param=value # to set a specific value for param
+
+From an API one could imagine these same parameters being passed in to form
+the required argument/parameter 'argv' vector as e.g.
+
+ from VOClient import tasks as voc
+ status = voc.task ("param=value", ....)
+
+Accomodating a return value from the task would affect this sort of interface
+(e.g. if the task were to return an in-memory FITS file instead of a status
+code) but the idea is to support both standard CLI options as well as a p=v
+format more appropriate for a tasking API interface.
+
+
+Common Options/Parameters:
+
+ All tasks(*) support a core set of options, namely
+
+ -h,--help Print a task usage summary and examples
+ -%,--test <input> Run unit tests (some tasks require <input>)
+ -r,--return <opt> Return optional result object
+
+All other options are task-specific however an effort has been made to make
+these consistent across tasks (e.g. a "--input" for input files, "--fmt" for
+output VOTable formats, "--samp" for SAMP functionality, etc).
+
+ The "--help" (or "-h") option to each task should provide enough runtime
+documentation to get started with using a task, in particular the examples
+given in the help are meant to always be valid.
+
+ The "--test" (or "-%") option is a way to run unit tests on a particular
+task, primarily based on the examples given in "--help". Depending on the
+task an input file/arguments of some form must be provided for the tests to
+work. For example, unit tests of VOTable tools can be run using votables
+returned from various data services to ensure proper behavior for all VO
+resources or to test operation against various (non)compliant files. This
+same mechanism can be used to build a regression test suite against a static
+list of VO Resources or standardized data files.
+
+ The "--return" option is task-specific and its use will depend largely
+on the API implementing it. A detailed description of the return objects
+will be provided in the task/API documentation.
+
+
+ (*) Exceptions as of this writing are the original VO-CLI tasks
+ VODATA/VOSESAME/VODIRECTORY, these will be implemented before
+ release.
+
+
+
+SAMP Interoperability
+---------------------
+
+ The VOSAMP task a CLI tool for sending messages to other SAMP-enabled
+applications, either as a one-off CLI execution or from within a scripted
+environment. To hide the SAMP details, the CLI interface is written to be
+more user-friendly, e.g. the options(*) on the command line are (in part):
+
+
+ load <url> load the named image/table file
+ loadImage <url> load the named image
+ loadVOTable <url> load the named VOTable
+ loadFITS <url> load the named FITS bintable
+ showRow [<url>] <row> [tblId] highlight specified row
+ selectRows [<url>] <rows> [tblId] select specified rows
+ bibcode <bibcode> load the named bibcode
+
+ exec <cmd> execute a client command
+ pointAt <ra> <dec> point at given coords
+ setenv <name> <value> set an environment value
+ getenv <name> get an environment value
+ setparam <name> <value> set a parameter value
+ getparam <name> get a parameter value
+
+ send <mtype> [<args> ...] generalized <mtype> message send
+
+
+where "<url>" might be an actual HTTP reference, a local file path/name, or
+a 'file://' URI. The commands themselves are cases insensitive and the
+VOSAMP help page should be consulted for details on sending non-standard
+messages using the 'send' option for general messages (i.e. those messages
+that don't conform to an IVOA-supported 'mtype' but which might be used in
+a custom workflow). When VOSAMP is called using an API these commands are
+passed through the argument string an provide a trivial high-level method
+of sending SAMP messages without requiring the app to explicty connect to
+the Hub (receiving messages will still normally require the app to register
+itself in order to handle messages using the application's callbacks).
+
+ A "normal" SAMP-enabled application will establish a connection to the
+local desktop apps once and then process subsequent messages for the life
+of the application. In a CLI tool, this model introduces the overhead of
+the initial connection (several seconds) on each command, an effect which
+compounds when a CLI tool is used from within a script that might be
+processing many tens-to-thousands of messages as it is used in some
+user-defined workflow. To avoid this overhead, the VOSAMP task will
+default to become a bacakground 'proxy' service that lingers after the
+initial command is executed, i.e. in the same way a 'sudo' command won't
+require a password for each command for some time after the initial call,
+VOSAMP will background itself after the first command to maintain its
+connection to SAMP Hub, subsequent calls to VOSAMP will simply forward the
+command from the CLI to this proxy to make use of the existing SAMP
+connection and execute as quickly as any other persistant SAMP task.
+
+(*) SSA message data are not yet implemented.
+
+
+Inter-Desktop Messaging:
+
+ VOSAMP reads its command either from stdin, a named command file (e.g.
+as from a VOSAMP-shell interpreter), or from a socket created when the proxy
+process is created. This socket is created on an inet port that may be
+visible to the whole internet, or on a private port restricted by local
+system administrators to trusted clients (e.g. port 8080 if that is a
+general service provided by a site, or the default port 4000 for sites
+willing to open a firewall hole).
+
+ An example sequence of SAMP commands would be something like
+
+ % vosamp listClients
+ % vosamp loadVOTable foo.xml
+
+where the first command establishes a SAMP connection, and the second would
+forward the CLI command to the (already running) proxy client without
+establishing a new-application context.
+
+ In this model, a proxy VOSAMP app reading from an inet socket opens
+the possibility of using this proxy from a remote host that can send a
+command from a trusted machine. For example,
+
+ On host A:
+ % vosamp start # start proxy client on host A (140.252.1.86)
+
+ On host B:
+ % vosamp --proxy=140.252.1.86:4000 loadVOTable foo.xml
+
+where the '140.252.1.86' is the machine running the intial VOSAMP task,
+'4000' is the inet port that proxy is reading commands, and the remainder
+of the commandline are args to be passed thru as it they were issued from
+the local host. Local data (e.g. the 'foo.xml' file) is sent to the remote
+before executing the command, file:// URL's are rewritten so the file
+reference remains valid on the remote machine (http:// URLs are unchanged).
+
+
+SAMP Session Manager: (In development)
+
+ By using the proxy client, we can send commands to a VOSAMP application
+from a remote machine, but this is not quite the same as federating two (or
+more) desktops in a shared session. We are also limited by the ability to
+bypass firewalls in order to connect to the proxy client. The solution then
+is to have a public "session manager" service that serves as an alternate
+input source to the proxy client and will acto to forward message from one
+machine to the others. For example,
+
+ +-------------+
+ | Session Mgr |
+ +-------------+
+ ^
+ / \
+ / \
+ +-------------------------+ +-------------------------+
+ | Topcat \ | | / Topcat |
+ | Hub - VOSAMP | | VOSAMP - Hub |
+ | Aladin / | | \ IRAF |
+ +-------------------------+ +-------------------------+
+ Host A Host B
+
+Since the session manager is on a public host, the VOSAMP on each machine
+makes an outgoing client connection and sets up that socket to receive
+commands and subscribes to all message types so that SAMP messages received
+on the local machine can be forwarded back to the session manager and then
+on to other machines in the session. For example, the Aladin on Host A
+broadcasts an image.load.FITS message, the VOSAMP on Host forwards the
+message to the session manager than then passes it on to the VOSAMP on
+Host B for rebroadcast. In this way the message is seen on both desktops
+transparently. When local data is being used, this is uploaded to the
+session manager for storage in a web-accessible area, the forwarded message
+is then rewritten to use the URL and is accessed only when needed.
+
+ Sessions are created/joined with no special setup required, e.g.
+
+ % vosamp --session=foo e.g. commandline tool
+or
+ voc.vosamp ("session=foo") e.g. from language API
+
+The VOSAMP in this case would contact the session manager to join the list
+of machines in session 'foo', this session would be created if it did not
+already exist and sessions quietly end when the VOSAMP proxies timeout due
+to inactivity or are shut down explicitly. There is no need for formal
+security since it is up to the parties in the session to agree on and share
+the session name of their choosing. Applications written using the language
+bindings can participate in sessions by simply calling the VOSAMP task to
+create the proxy regardless of whether it is used explicitly for messaging.
+
+ If the VAO were to operate a public session manager service, it would
+trivial to log its use for reporting to the funding agencies, and would
+meet the mandate of VAO providing tools for community use. Details of
+the communication protocol could be written as an IVOA note to allow other
+implementations to make use of the service, or it could be formalized into
+a next version of the SAMP protocol itself.
+
+[Status: Proxy clients for use on the desktop and between trusted machines
+ is implemented, development of the session manager and extensions to
+ VOSAMP will be ready for demonstration at the Seattle meeting. (8/11/12)]
+
+
+