Feature #1740
Feature #44: Implement basic introspection support
Implement introspection event sender
Status: | Resolved | Start date: | 03/24/2014 | |
---|---|---|---|---|
Priority: | Normal | Due date: | 03/24/2014 | |
Assignee: | J. Moringen | % Done: | 100% | |
Category: | Common Lisp | |||
Target version: | rsb-0.11 |
Description
- Basic participant information
- Echo server for clock measurements
Associated revisions
Added introspection? parameter to participant creation in src/**/*.lisp
refs #1740
- src/protocol.lisp (make-participant): accept introspection? keyword
parameter; adjusted documentation string accordingly
(make-participant-using-class class t scope): accept introspection?
keyword parameter; pass to make participant hook but not to next
method
(make-listener): added introspection? keyword parameter; adjusted
documentation string accordingly
(make-reader): likewise
(make-informer): likewise - src/patterns/request-reply/protocol.lisp (make-remote-server):
likewise
(make-local-server): likewise - src/patterns/request-reply/server.lisp (define-lazy-creation-method):
pass server's introspection? option to created participant
(server::introspection?): new slot; indicates whether introspection
should be enabled for methods of the server
(make-participant-using-class class server scope): accept
introspection? keyword parameter; store value in created server - src/patterns/request-reply/local-server.lisp (set-method): pass local
server's introspection? option to created method - src/patterns/request-reply/remote-server.lisp (ensure-method):
likewise - test/protocol.lisp (test hooks-root::make-participant-hook/smoke):
added test cases for :introspection? initarg - test/listener.lisp (define-basic-participant-test-cases listener):
likewise - test/reader.lisp (define-basic-participant-test-cases reader):
likewise - test/informer.lisp (define-basic-participant-test-cases informer):
likewise - test/patterns/request-reply/local-server.lisp
(define-basic-participant-test-cases local-server): likewise - test/patterns/request-reply/remote-server.lisp
(define-basic-participant-test-cases remote-server): likewise
Initial introspection infrastructure in src/introspection/*.lisp
- src/introspection/conditions.lisp: new file; contains conditions used
by the introspection module - src/introspection/protocol.lisp: new file; contains protocol functions
of the introspection module - src/introspection/variables.lisp: new file; contains functions for
constructing introspection-related scopes and parameters holding
default scopes - src/introspection/package.lisp: new file; package definition for
introspection module - test/introspection/package.lisp: new file; package definition for unit
tests of introspection module - rsb-introspection.asd: new file; system description for
rsb-introspection system - lift-introspection.config: new file; lift configuration for testing
the rsb-introspection system - CMakeLists.txt (test): new function; configure execution of unit tests
of one (sub-)system; use to test cl-rsb and rsb-introspection as two
separate systems
Support for gathering platform information in src/introspection/platform-*.lisp
New functions that use platform-specific mechanism to gain information
about the current process and local host.
- src/introspection/platform-common.lisp: new file; contains common
helper functions and non-platform-specific functions - src/introspection/platform-generic.lisp: new file; contains a generic
fallback implementation of the platform information functions - src/introspection/platform-sbcl-linux.lisp: new file; contains an
implementation of the platform information functions for SBCL on Linux - src/introspection/platform-sbcl-darwin.lisp: new file; contains an
implementation of the platform information functions for SBCL on
Darwin - src/introspection/platform-sbcl-win32.lisp: new file; contains an
implementation of the platform information functions for SBCL on Win32 - src/introspection/package.lisp (package rsb.introspection): added used
packages let-plus and more-conditions - test/introspection/package.lisp (package rsb.introspection.test):
added imported-from rsb.introspection symbols current-process-id,
current-program-name-and-commandline-arguments,
current-process-start-time and current-host-id - test/introspection/platform.lisp: new file; contains basic tests for
platform information functionality - rsb-introspection.asd (system rsb-introspection): added system
dependency on uiop; added files
src/introspection/platform-{common,generic,sbcl-linux,sbcl-darwin,
sbcl-win32}.lisp
(system rsb-introspection-test): added file
test/introspection/platform.lisp
Added introspection model in src/introspection/model.lisp
refs #1740, refs #1744, refs #1830
Introspection model classes- for platform information: participants, processes and hosts.
- for messages: hello and bye
- src/introspection/types.lisp: new file; contains types used in the
introspection module - src/introspection/protocol.lisp (info-most-recent-activity): new
generic function; return timestamp of most recent activity on the
instances
(info-clock-offset): new generic function; return estimated clock
offset
(info-latency): new generic function; return estimated communication
latency
(participant-info-kind): new generic function; return kind of
participant
(participant-info-id): new generic function; return id of participant
(participant-info-parent-id): new generic function; return id of the
parent of the participant
(participant-info-scope): new generic function; return scope of
participant
(participant-info-type): new generic function; return type of
participant
(participant-info-transports): new generic function; return list of
transports of the participant
(process-info-process-id): new generic function; return id of the
process
(process-info-program-name): new generic function; return program name
of the process
(process-info-commandline-arguments): new generic function; return
commandline options of the process
(process-info-start-time): new generic function; return start time of
the process
(process-info-state): new generic function; return state of the
process
(process-info-transports): new generic function; return list of
transports via which the process has been contacted
(host-info-id): new generic function; return id of host
(host-info-hostname): new generic function; return hostname of host
(host-info-state): new generic function; return state of host
(hello-participant): new generic function; return participant-info of
the message
(hello-process): new generic function; return process-info of the
message
(hello-host): new generic function; return host-info of the message
(bye-id): new generic function; return participant id of the message - src/introspection/model.lisp: new file; contains model classes for
local and remote objects used by both local and remote introspection - src/introspection/package.lisp (package rsb.introspection): added
exported symbols info-most-recent-activity, info-clock-offset,
info-latency, participant-info, remote-participant-info,
participant-info-kind, participant-info-id,
participant-info-parent-id, participant-info-scope,
participant-info-type, participant-info-transports, process-info,
remote-process-info, process-info-process-id, process-info-state,
process-info-program-name, process-info-transports,
process-info-commandline-arguments, process-info-start-time,
current-process-info, host-info, remote-host-info, host-info-id,
host-info-state, host-info-hostname, current-host-info, hello,
hello-participant, hello-process, hello-host, bye, and bye-id - test/introspection/model.lisp: new file; contains unit tests for the
introspection model - rsb-introspection.asd (system rsb-introspection): added
defsystem-dependency on cl-protobuf; added module "protocol" with
files files rsb/protocol/introspection/{Hello,Bye}.proto; added files
src/introspection/types.lisp and src/introspection/model.lisp
(system rsb-introspection-test): added file
test/introspection/model.lisp
Added converters for introspection messages in src/introspection/conversion.lisp
- src/introspection/conversion.lisp: new file; contains converters
between rsb.protocol.introspection.{Hello,Bye} protocol buffer
messages and rsb.introspection:{hello,bye} classes - rsb-introspection.asd (system rsb-introspection): added file
src/introspection/conversion.lisp
Added introspection mixins in src/introspection/mixins.lisp
- src/conditions (no-such-participant-error): new condition; signaled
when a participant cannot be found in a container - src/introspection/protocol.lisp (introspection-participants): new
generic function; return participants of a container
(setf introspection-participants): new generic function; set
participants of a container
(introspection-participants/roots): new generic function; return root
participants of a hierarchical container
(call-with-database-lock): new generic function; call a thunk holding
a database lock - src/introspection/mixins.lisp: new file; contains mixin classes used
in the introspection module - src/introspection/package.lisp (package rsb.introspection): added
exported symbols no-such-participant-error,
no-such-participant-error-container, no-such-participant-error-id,
introspection-participants, introspection-participants/roots,
find-participant, call-with-database-lock and with-database-lock - rsb-introspection.asd (system rsb-introspection): added file
src/introspection/mixins.lisp
Added local introspection in src/introspection/local-introspection.lisp
Local introspection is implemented as a database container information
about the local host, the local process and local
participants. Participants are tracked by hooking into
`*make-participant-hook*' and
`*participant-state-change-hook*'. Changes, queries and requests are
processed using a listener, an informer and a local-server.
- src/introspection/protocol.lisp (introspection-processes): new generic
function; return processes of a container
(find-process): new generic function; find a process in a container
(setf find-process): new generic function; store a process in a
container
(ensure-process): new generic function; ensure a process exists in a
container
(introspection-hosts): new generic function; return hosts of a
container
(find-host): new generic function; find a host in a container
(setf find-host):new generic function; store a host in a container
(ensure-host): new generic function; ensure a hosts exists in a
container - src/introspection/variables.lisp (survey-filter): new variable;
stores a filter for introspection surveys
(broadcast-filter): new variable; stores a filter for introspection
broadcasts
(introspection-host-converters): new variable; stores converters for
host-related introspection communication
(introspection-all-converters): new variable; stores converters for
generic introspection communication
(local-database): new variable; stores the local introspection
database
(local-database-lock): new variable; stores a lock protecting the
local database
(call-with-local-database): new function; call a thunk with the local
database, creating and locking it if necessary/requested
(with-local-database): new macro; similar
(register-participant): new function; register a participant in the
local introspection database
(unregister-participant): new function; unregister a participant from
the local introspection database
(handle-make-participant): new function; handler for
`*make-participant-hook*' that calls `register-participant' when
appropriate
(handle-participant-state-change): new function;
(toplevel): register `*make-participant-hook*' and
'*participant-state-change-hook*' handlers - src/introspection/local-introspection.lisp: new file; contains
`introspection-sender' and `local-introspection' - src/introspection/package.lisp (package rsb.introspection): added
exported symbols introspection-processes, find-process,
ensure-process, introspection-hosts, find-host, and ensure-host - test/introspection/local-introspection.lisp: new file; contains unit
test for `local-introspection' and related functionality - test/introspection/package.lisp (package rsb.introspection.test):
added used package rsb.patterns.request-reply - rsb-introspection.asd (system rsb-introspection): added file
src/introspection/local-introspection.lisp
(system rsb-introspection-test): added file
test/introspection/local-introspection.lisp
History
#1 Updated by J. Moringen over 9 years ago
- Description updated (diff)
#2 Updated by J. Moringen over 9 years ago
- % Done changed from 50 to 80
#3 Updated by J. Moringen over 9 years ago
- % Done changed from 80 to 90
#4 Updated by J. Moringen about 9 years ago
- Category changed from Common Lisp to Introspection
#5 Updated by J. Moringen about 9 years ago
- Category changed from Introspection to Common Lisp
#6 Updated by J. Moringen almost 9 years ago
- Status changed from In Progress to Resolved
- % Done changed from 90 to 100
Applied in changeset rsb-cl|90bc27a442a4686da0f3c72251ae4d8ecf301ced.