Growler is a C++-based distributed object and event architecture. It is written in C++, and supports serialization of C++ objects as part of its Remote Method Invocation, Event Channels, and in its Interface Definition Language. Its primary application has been in support of interactive, distributed and collaborative visualization, computational steering, and concurrent visualization.
Growler was developed under the auspices of the Visualization Group at the NASA
Advanced Supercomputing facility (NAS) at NASA Ames Research Center.
The Visualization Group members are:
This eventchannel definition is used for distributing field data from
a live fvGCM run:
%cinclude <lib/buffer.h>
%cinclude <lib/vector.h>
%cinclude <lib/array.h>
%cinclude <lib/utility.h>
enum { DataVectorPort = 10100 };
typedef lib::Array<uint32_t,3> dimarray;
struct MetaData {
int32_t lat, lon;
uint32_t nymd, nhms;
uint32_t pdt;
uint32_t nsteps;
uint32_t stride;
std::vector<std::pair<std::string,dimarray> > fields;
}
eventport DataVectorChannel
{
metadata(MetaData mdat) state;
datavec[16](lib::Vector<float> dv);
}
|
This is the cpumon.pidl specification used by
NodeMon for distributing cpu statistics:
%import <nodemon/nodemon.pidl>
%cinclude <lib/vector.h>
/*
* About /proc/stat:
*
The very first "cpu" line aggregates the numbers in all of the other "cpuN"
lines. These numbers identify the amount of time the CPU has spent performing
different kinds of work. Time units are in USER_HZ (typically hundredths of a
second). The meanings of the columns are as follows, from left to right:
- user: normal processes executing in user mode
- nice: niced processes executing in user mode
- system: processes executing in kernel mode
- idle: twiddling thumbs
- iowait: waiting for I/O to complete
- irq: servicing interrupts
- softirq: servicing softirqs
*/
struct CPUData {
uint32_t v[7]; // the seven columns
}
// CPUDataVector: array of cpu data rows from /proc/stat
typedef std::vector<CPUData> CPUDataVector;
typedef std::vector<uint32_t> CPUSetVector;
typedef std::vector<std::string> CPUSetNameVector;
eventport CPUMonChannel
{
cpu_data(CPUDataVector) nonqueued;
cpuset_data(CPUSetVector) state;
cpuset_names(CPUSetNameVector) state;
}
port CPUMon : nodemon::NodeMonAgent
{
CPUMonChannel_ptr getMonChannel(out uint32_t cpucount);
}
|