bes
Updated for version 3.17.4
|
#include <BESDapResponseBuilder.h>
Public Member Functions | |
BESDapResponseBuilder () | |
void | conditional_timeout_cancel () |
virtual std::string | get_async_accepted () const |
virtual std::string | get_btp_func_ce () const |
virtual std::string | get_ce () const |
Get the constraint expression. More... | |
virtual std::string | get_dap4ce () const |
Get the DAP4 constraint expression. More... | |
virtual std::string | get_dap4function () const |
Get the DAP4 server side function expression. More... | |
virtual std::string | get_dataset_name () const |
Get the dataset name. More... | |
virtual std::string | get_store_result () const |
virtual libdap::DDS * | intern_dap2_data (BESResponseObject *obj, BESDataHandlerInterface &dhi) |
virtual libdap::DDS * | process_dap2_dds (BESResponseObject *obj, BESDataHandlerInterface &dhi) |
Process a DDS (i.e., apply a constraint) for a non-DAP transmitter. More... | |
virtual void | send_dap2_data (std::ostream &data_stream, libdap::DDS **dds, libdap::ConstraintEvaluator &eval, bool with_mime_headers=true) |
virtual void | send_dap4_data (std::ostream &out, libdap::DMR &dmr, bool with_mime_headers=true) |
virtual void | send_das (std::ostream &out, libdap::DAS &das, bool with_mime_headers=true) const |
virtual void | send_das (std::ostream &out, libdap::DDS **dds, libdap::ConstraintEvaluator &eval, bool constrained=false, bool with_mime_headers=true) |
virtual void | send_dds (std::ostream &out, libdap::DDS **dds, libdap::ConstraintEvaluator &eval, bool constrained=false, bool with_mime_headers=true) |
Transmit a DDS. More... | |
virtual void | send_ddx (std::ostream &out, libdap::DDS **dds, libdap::ConstraintEvaluator &eval, bool with_mime_headers=true) |
virtual void | send_dmr (std::ostream &out, libdap::DMR &dmr, bool with_mime_headers=true) |
virtual void | serialize_dap2_data_dds (std::ostream &out, libdap::DDS **dds, libdap::ConstraintEvaluator &eval, bool ce_eval=true) |
virtual void | serialize_dap4_data (std::ostream &out, libdap::DMR &dmr, bool with_mime_headers=true) |
virtual void | set_async_accepted (std::string _aa) |
virtual void | set_btp_func_ce (std::string _ce) |
virtual void | set_ce (std::string _ce) |
virtual void | set_dap4ce (std::string _ce) |
virtual void | set_dap4function (std::string _func) |
virtual void | set_dataset_name (const std::string _dataset) |
Set the dataset pathname. More... | |
virtual void | set_store_result (std::string _sr) |
virtual void | split_ce (libdap::ConstraintEvaluator &eval, const std::string &expr="") |
virtual bool | store_dap4_result (ostream &out, libdap::DMR &dmr) |
DDS_timeout | |
Old deprecated BESDapResponseBuilder timeout code. Do not use. | |
void | register_timeout () const |
void | set_timeout (int timeout=0) |
int | get_timeout () const |
void | timeout_on () const |
void | timeout_off () |
virtual void | establish_timeout (std::ostream &stream) const |
virtual void | remove_timeout () const |
Transmit data. More... | |
Protected Member Functions | |
void | initialize () |
void | send_dap4_data_using_ce (std::ostream &out, libdap::DMR &dmr, bool with_mime_headersr) |
Protected Attributes | |
std::string | d_async_accepted |
Should a timeout be cancelled once transmission starts? More... | |
std::string | d_btp_func_ce |
DAP4 Server Side Function expression. | |
bool | d_cancel_timeout_on_send |
Version string for the library's default protocol version. | |
std::string | d_dap2ce |
Name of the dataset/database. | |
std::string | d_dap4ce |
DAP2 Constraint expression. | |
std::string | d_dap4function |
DAP4 Constraint expression. | |
std::string | d_dataset |
std::string | d_default_protocol |
Response timeout after N seconds. | |
std::string | d_store_result |
int | d_timeout |
The BTP functions, extracted from the CE. | |
Friends | |
class | ResponseBuilderTest |
This class is used to build responses for/by the BES. This class replaces DODSFilter (although DODSFilter is still included in the library, its use is deprecated). and it does not have a provision for command line arguments.
Definition at line 51 of file BESDapResponseBuilder.h.
|
inline |
Make an empty instance. Use the set_*() methods to load with needed values. You must call at least set_dataset_name() or be requesting version information.
Definition at line 93 of file BESDapResponseBuilder.h.
void BESDapResponseBuilder::conditional_timeout_cancel | ( | ) |
If the value of the BES Key BES.CancelTimeoutOnSend is true, cancel the timeout. The intent of this is to stop the timeout counter once the BES starts sending data back since, the network link used by a remote client may be low-bandwidth and data providers might want to ensure those users get their data (and don't submit second, third, ..., requests when/if the first one fails). The timeout is initiated in the BES framework when it first processes the request.
Definition at line 328 of file BESDapResponseBuilder.cc.
|
virtual |
Use values of this instance to establish a timeout alarm for the server. If the timeout value is zero, do nothing.
Definition at line 359 of file BESDapResponseBuilder.cc.
|
virtual |
Return the entire DAP2 constraint expression in a string. This includes both the projection and selection clauses, but not the question mark.
Definition at line 150 of file BESDapResponseBuilder.cc.
|
virtual |
Return the entire DAP4 constraint expression in a string.
Definition at line 173 of file BESDapResponseBuilder.cc.
|
virtual |
Return the entire DAP4 server side function expression in a string.
Definition at line 196 of file BESDapResponseBuilder.cc.
|
virtual |
The ``dataset name'' is the filename or other string that the filter program will use to access the data. In some cases this will indicate a disk file containing the data. In others, it may represent a database query or some other exotic data access method.
Definition at line 247 of file BESDapResponseBuilder.cc.
int BESDapResponseBuilder::get_timeout | ( | ) | const |
Get the server's timeout value.
Definition at line 278 of file BESDapResponseBuilder.cc.
|
protected |
Look up the BES Keys (parameters in the bes.conf file) that this class uses.
Definition at line 121 of file BESDapResponseBuilder.cc.
References BESKeys::get_value(), and TheBESKeys::TheKeys().
|
virtual |
Read data into the ResponseObject (a DAP2 DDS). Instead of serializing the data as with send_dap2_data(), this uses the variables' intern_data() method to load the variables so that a transmitter other than libdap::BaseType::serialize() can be used (e.g., AsciiTransmitter).
obj | The BESResponseObject. Holds the DDS for this request. |
dhi | The BESDataHandlerInterface. Holds many parameters for this request. |
Definition at line 959 of file BESDapResponseBuilder.cc.
References BESDataHandlerInterface::data, BESDataHandlerInterface::first_container(), BESDapFunctionResponseCache::get_or_cache_dataset(), and BESDataDDSResponse::set_dds().
|
virtual |
This is a companion method to the intern_dap2_data() method. Unlike that, this simply evaluates the CE against the DDS, including any functions.
obj | ResponseObject wrapper |
dhi | Various parameters to the handler |
Definition at line 890 of file BESDapResponseBuilder.cc.
References BESDataHandlerInterface::data, BESDataHandlerInterface::first_container(), BESDDSResponse::get_ce(), BESDDSResponse::get_dds(), BESDapFunctionResponseCache::get_or_cache_dataset(), and BESDDSResponse::set_dds().
void BESDapResponseBuilder::register_timeout | ( | ) | const |
Configure a signal handler for the SIGALRM. The signal handler will throw a DAP Error object if the alarm signal is triggered.
Definition at line 342 of file BESDapResponseBuilder.cc.
|
virtual |
Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream
.
dds | A DDS object containing the data to be sent. |
eval | A reference to the ConstraintEvaluator to use. |
data_stream | Write the response to this stream. |
anc_location | A directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time(). |
with_mime_headers | If true, include the MIME headers in the response. Defaults to true. |
Definition at line 869 of file BESDapResponseBuilder.cc.
|
virtual |
Build the DAP2 data response.
data_stream | |
dds | |
eval | |
with_mime_headers |
Definition at line 1060 of file BESDapResponseBuilder.cc.
References BESDapFunctionResponseCache::get_or_cache_dataset().
|
virtual |
This function formats and prints an ASCII representation of a DDS on stdout. Either an entire DDS or a constrained DDS may be sent. This function looks in the local cache and uses a DDS object there if it's valid. Otherwise, if the request CE contains server functions that build data for the response, the resulting DDS will be cached.
out | The output stream to which the DAS is to be sent. |
dds | The DDS to send back to a client. |
eval | A reference to the ConstraintEvaluator to use. |
constrained | If this argument is true, evaluate the current constraint expression and send the `constrained DDS' back to the client. |
constrained | If true, apply the constraint bound to this instance of ResponseBuilder |
with_mime_headers | If true (default) send MIME headers. |
Definition at line 584 of file BESDapResponseBuilder.cc.
References BESUtil::assemblePath(), BESStoredDapResultCache::get_instance(), BESDapFunctionResponseCache::get_or_cache_dataset(), BESKeys::get_value(), and TheBESKeys::TheKeys().
|
virtual |
Send the DDX response. The DDX never contains data, instead it holds a reference to a Blob response which is used to get the data values. The DDS and DAS objects are built using code that already exists in the servers.
dds | The dataset's DDS with attributes in the variables. |
eval | A reference to the ConstraintEvaluator to use. |
out | Destination |
with_mime_headers | If true, include the MIME headers in the response. Defaults to true. |
Definition at line 1172 of file BESDapResponseBuilder.cc.
References BESDapFunctionResponseCache::get_or_cache_dataset().
|
virtual |
Build/return the BLOB part of the DAP2 data response.
Definition at line 770 of file BESDapResponseBuilder.cc.
References BESStopWatch::start().
|
virtual |
Serialize the DAP4 data response to the passed stream
Definition at line 1330 of file BESDapResponseBuilder.cc.
|
virtual |
Set the DAP2 constraint expression. This will filter the CE text removing any 'WWW' escape characters except space. Spaces are left in the CE because the CE parser uses whitespace to delimit tokens while some datasets have identifiers that contain spaces. It's possible to use double quotes around identifiers too, but most client software doesn't know about that.
@brief Set the CE
_ce | The constraint expression |
Definition at line 165 of file BESDapResponseBuilder.cc.
|
virtual |
Set the DAP4 constraint expression. This will filter the DAP4 CE text removing any 'WWW' escape characters except space. Spaces are left in the CE because the CE parser uses whitespace to delimit tokens while some datasets have identifiers that contain spaces. It's possible to use double quotes around identifiers too, but most client software doesn't know about that.
@brief Set the CE
_ce | The constraint expression |
Definition at line 188 of file BESDapResponseBuilder.cc.
|
virtual |
Set the DAP4 Server Side Function expression. This will filter the function expression text removing any 'WWW' escape characters except space. Spaces are left in the CE because the CE parser uses whitespace to delimit tokens while some datasets have identifiers that contain spaces. It's possible to use double quotes around identifiers too, but most client software doesn't know about that.
@brief Set the CE
_ce | The constraint expression |
Definition at line 212 of file BESDapResponseBuilder.cc.
|
virtual |
Set the dataset name, which is a string used to access the dataset on the machine running the server. That is, this is typically a pathname to a data file, although it doesn't have to be. This is not echoed in error messages (because that would reveal server storage patterns that data providers might want to hide). All WWW-style escapes are replaced except for spaces.
ds | The pathname (or equivalent) to the dataset. |
Definition at line 262 of file BESDapResponseBuilder.cc.
void BESDapResponseBuilder::set_timeout | ( | int | t = 0 | ) |
Set the server's timeout value. A value of zero (the default) means no timeout.
t | Server timeout in seconds. Default is zero (no timeout). |
Definition at line 272 of file BESDapResponseBuilder.cc.
|
virtual |
Split the CE so that the server functions that compute new values are separated into their own string and can be evaluated separately from the rest of the CE (which can contain simple and slicing projection as well as other types of function calls).
Definition at line 414 of file BESDapResponseBuilder.cc.
References BESDapFunctionResponseCache::get_or_cache_dataset().
|
virtual |
Should this DAP4 result be stored and the client sent an Asynchronous response? This code looks at the 'store_result' property to determine if the response should be asynchronous and then, if so, churns through the options, sorting out if the client sent the correct information indicating it knows how to process them. If the 'store_result' property is not set, then this method simply returns false, indicating that the response should be returned using the normal synchronous response pattern.
out | Write information about the response here |
dmr | This DMR will be serialized to build the response, at some point in time |
OOPS. Looks like the BES is not configured to use a Stored Result Cache. Looks like need to reject the request and move on.
Client accepts async responses so, woot! lets store this thing and tell them where to find it.
Client didn't indicate a willingness to accept an async response So - we tell them that async is required.
Definition at line 1375 of file BESDapResponseBuilder.cc.
References BESUtil::assemblePath(), BESStoredDapResultCache::get_instance(), BESKeys::get_value(), BESStoredDapResultCache::store_dap4_result(), and TheBESKeys::TheKeys().
void BESDapResponseBuilder::timeout_off | ( | ) |
void BESDapResponseBuilder::timeout_on | ( | ) | const |
Turn on the alarm. The code will timeout after d_timeout seconds unless timeout_off() is called first.
Definition at line 290 of file BESDapResponseBuilder.cc.
|
protected |
Time, if any, that the client will wait for an async response. An empty string (length=0) means the client didn't supply an async parameter
Definition at line 70 of file BESDapResponseBuilder.h.
|
protected |
If set (i.e. non-null) then the client has asked for the result to be stored for later retrieval. The value is the service URL used to construct the stored result access URL to be returned to the client. An empty string (length=0) means the client didn't supply a store_result async parameter
Definition at line 78 of file BESDapResponseBuilder.h.