You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

467 lines
18 KiB
C++

/***************************************************************************
* Copyright (C) gempa GmbH *
* All rights reserved. *
* Contact: gempa GmbH (seiscomp-dev@gempa.de) *
* *
* GNU Affero General Public License Usage *
* This file may be used under the terms of the GNU Affero *
* Public License version 3.0 as published by the Free Software Foundation *
* and appearing in the file LICENSE included in the packaging of this *
* file. Please review the following information to ensure the GNU Affero *
* Public License version 3.0 requirements will be met: *
* https://www.gnu.org/licenses/agpl-3.0.html. *
* *
* Other Usage *
* Alternatively, this file may be used in accordance with the terms and *
* conditions contained in a signed written agreement between you and *
* gempa GmbH. *
***************************************************************************/
#ifndef SEISCOMP_DATAMODEL_DATABASE_QUERY_H__
#define SEISCOMP_DATAMODEL_DATABASE_QUERY_H__
#include <vector>
#include <seiscomp/datamodel/timequantity.h>
#include <seiscomp/datamodel/waveformstreamid.h>
#include <string>
#include <seiscomp/datamodel/realquantity.h>
#include <seiscomp/datamodel/types.h>
#include <seiscomp/datamodel/phase.h>
#include <seiscomp/datamodel/creationinfo.h>
#include <seiscomp/core/datetime.h>
#include <seiscomp/datamodel/timewindow.h>
#include <seiscomp/datamodel/originquality.h>
#include <seiscomp/datamodel/originuncertainty.h>
#include <seiscomp/datamodel/integerquantity.h>
#include <seiscomp/datamodel/nodalplanes.h>
#include <seiscomp/datamodel/principalaxes.h>
#include <seiscomp/datamodel/tensor.h>
#include <seiscomp/datamodel/sourcetimefunction.h>
#include <seiscomp/datamodel/blob.h>
#include <seiscomp/datamodel/complexarray.h>
#include <seiscomp/datamodel/realarray.h>
#include <seiscomp/datamodel/arclinkrequestsummary.h>
#include <seiscomp/datamodel/arclinkstatusline.h>
#include <seiscomp/datamodel/databasereader.h>
namespace Seiscomp {
namespace DataModel {
DEFINE_SMARTPOINTER(DatabaseQuery);
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/** \brief Query class for the scheme packages
* This class implements the query interface and executes a query
* on a database.
*/
class SC_SYSTEM_CORE_API DatabaseQuery : public DatabaseReader {
// ----------------------------------------------------------------------
// Xstruction
// ----------------------------------------------------------------------
public:
//! Constructor
DatabaseQuery(Seiscomp::IO::DatabaseInterface* dbDriver);
//! Destructor
~DatabaseQuery();
// ----------------------------------------------------------------------
// Query interface
// ----------------------------------------------------------------------
public:
Station* getStation(const std::string& network_code,
const std::string& station_code,
Seiscomp::Core::Time time);
/**
* Returns the Event referencing a particular Origin.
* @param originID The publicID of the Origin
* @return A pointer to the Event object
*/
Event* getEvent(const std::string& originID);
/**
* Returns the Event having a particular preferredMagnitudeID.
* @param magnitudeID The publicID of the NetworkMagnitude
* @return A pointer to the Event object
*/
Event* getEventByPreferredMagnitudeID(const std::string& magnitudeID);
/**
* Returns the Event referencing a particular FocalMechanism.
* @param focalMechanismID The publicID of the FocalMechanism
* @return A pointer to the Event object
*/
Event* getEventForFocalMechanism(const std::string& focalMechanismID);
/**
* Returns the Event.
* @param eventID The publicID of the Event
* @return A pointer to the Event object
*/
Event* getEventByPublicID(const std::string& eventID);
/**
* Returns an Amplitude of a particular type and
* references a certain Pick.
* @param pickID The referenced publicID of a Pick
* @param type The type of the StationAmplitude
* @return A pointer to the StationAmplitude object
*/
Amplitude* getAmplitude(const std::string& pickID,
const std::string& type);
/**
* Returns all Amplitudes in a given timewindow. As reference
* time
* for the Amplitude is timeWindow.reference used.
* @param startTime The starttime of the timewindow
* @param endTime The endtime of the timewindow
* @return An iterator to iterate over the amplitudes.
*/
DatabaseIterator getAmplitudes(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns all Amplitudes referencing a certain Pick.
* @param pickID The referenced publicID of a Pick
* @return An iterator to iterate over the result set
*/
DatabaseIterator getAmplitudesForPick(const std::string& pickID);
/**
* Returns all Amplitudes that are references by the Arrivals
* of an Origin.
* @param originID The publicID of the Origin
* @return An iterator to iterate over the result set
*/
DatabaseIterator getAmplitudesForOrigin(const std::string& originID);
/**
* Returns all Origins where an assoziated pick is references
* by the
* AmplitudeID.
* @param amplitudeID The publicID of the Amplitude
* @return An iterator to iterate over the result set
*/
DatabaseIterator getOriginsForAmplitude(const std::string& amplitudeID);
/**
* Returns all the origin that holds the given magnitude.
* @param magnitudeID The publicID of the magnitude
* @return A pointer to the Origin object
*/
Origin* getOriginByMagnitude(const std::string& magnitudeID);
/**
* Returns all Arrivals where an assoziated pick is references
* by the
* AmplitudeID.
* @param amplitudeID The publicID of the Amplitude
* @return An iterator to iterate over the result set
*/
DatabaseIterator getArrivalsForAmplitude(const std::string& amplitudeID);
/**
* Returns all Picks that are references by the Arrivals of an
* Origin.
* @param originID The publicID of the Origin
* @return An iterator to iterate over the result set
*/
DatabaseIterator getPicks(const std::string& originID);
/**
* Returns all Picks in a given timewindow
* @param startTime The starttime of the timewindow
* @param endTime The endtime of the timewindow
* @return An iterator to iterate over the picks
*/
DatabaseIterator getPicks(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns all Picks in a given timewindow for a given stream
* @param startTime The starttime of the timewindow
* @param endTime The endtime of the timewindow
* @param The waveformStreamID
* @return An iterator to iterate over the picks
*/
DatabaseIterator getPicks(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const WaveformStreamID& waveformID);
/**
* Returns current waveform quality reports or alerts
* (assuming the end time is not set).
* @param type report/alert
* @return An iterator to iterate over the result set
*/
DatabaseIterator getWaveformQuality(const std::string& type);
/**
* Returns waveform quality reports in a given time window for
* a given streamID and parameter.
* @param streamID a WaveformStreamID
* @param parameter latency/delay/timing quality/gaps
* interval/gaps length/spikes interval/spikes amplitude/
* spikes count/offset/rms/availability
* @param startTime start time
* @param endTime end time
* @return an iterator to iterate over the WaveformQuality
* objects
*/
DatabaseIterator getWaveformQuality(const WaveformStreamID& waveformID,
const std::string& parameter,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns waveform quality reports in a given time window for
* a given streamID and parameter.
* @param parameter latency/delay/timing quality/gaps
* interval/gaps length/spikes interval/spikes amplitude/
* spikes count/offset/rms/availability
* @param startTime start time
* @param endTime end time
* @return an iterator to iterate over the WaveformQuality
* objects
*/
DatabaseIterator getWaveformQuality(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns waveform quality of a certain type (report/alert)
* in a given time window for a given streamID and parameter.
* @param streamID a WaveformStreamID
* @param parameter latency/delay/timing quality/gaps
* interval/gaps length/spikes interval/spikes amplitude/
* spikes count/offset/rms/availability
* @param type report/alert
* @param startTime start time
* @param endTime end time
* @return an iterator to iterate over the WaveformQuality
* objects
*/
DatabaseIterator getWaveformQuality(const WaveformStreamID& waveformID,
const std::string& parameter,
const std::string& type,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns WaveformQualities for a given waveformID, parameter
* and type, ordered by end date
* the youngest first.
* @param streamID a WaveformStreamID
* @param parameter latency/delay/timing quality/gaps
* interval/gaps
* length/spikes interval/spikes amplitude/ spikes
* count/offset/rms/availability
* @param type report/alert
* @return An iterator to iterate over the WaveformQualities
*/
DatabaseIterator getWaveformQualityDescending(const WaveformStreamID& waveformID,
const std::string& parameter,
const std::string& type);
/**
* Returns outages for the given waveform stream ID and the
* given time window
* @param streamID a WaveformStreamID
* @param startTime start time
* @param endTime end time
* @return an iterator to iterate over the Outage objects
*/
DatabaseIterator getOutage(const WaveformStreamID& waveformID,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns qclogs for the given waveform stream ID and the
* given time window
* @param streamID a WaveformStreamID
* @param startTime start time
* @param endTime end time
* @return an iterator to iterate over the QCLog objects
*/
DatabaseIterator getQCLog(const WaveformStreamID& waveformID,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns preferred origins of events in a given time range
* @param startTime start time
* @param endTime end time
* @param referenceOriginID origin to exclude
* @return An iterator to iterate over the result set
*/
DatabaseIterator getPreferredOrigins(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& referenceOriginID);
/**
* Returns preferred magnitudes of events in a given time range
* @param startTime start time
* @param endTime end time
* @param referenceMagnitudeID magnitude to exclude
* @return An iterator to iterate over the result set
*/
DatabaseIterator getPreferredMagnitudes(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& referenceMagnitudeID);
/**
* Returns events in a given time range
* @param startTime start time
* @param endTime end time
* @return An iterator to iterate over the events
*/
DatabaseIterator getEvents(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns origins for a given event ordered by creation date
* the oldest first.
* @param eventID The ID of the event
* @return An iterator to iterate over the origins
*/
DatabaseIterator getOrigins(const std::string& eventID);
/**
* Returns origins for a given event ordered by creation date
* the youngest first.
* @param eventID The ID of the event
* @return An iterator to iterate over the origins
*/
DatabaseIterator getOriginsDescending(const std::string& eventID);
/**
* Returns focal mechanisms for a given event ordered by
* creation date
* the youngest first.
* @param eventID The ID of the event
* @return An iterator to iterate over the focal mechanisms
*/
DatabaseIterator getFocalMechanismsDescending(const std::string& eventID);
/**
* Returns the pickID's of all origins of an event with
* given publicID
* @param publicID The event's publicID (eventID)
* @return An iterator to iterator over the result ID's
* that are unique in the result set.
*/
DatabaseIterator getEventPickIDs(const std::string& publicID);
/**
* Returns the pickID's of all origins of an event with
* given publicID and with weight greater a given weight
* @param publicID The event's publicID (eventID)
* @param weight The minimum weight for an arrival
* @return An iterator to iterator over the result ID's
* that are unique in the result set.
*/
DatabaseIterator getEventPickIDsByWeight(const std::string& publicID,
double weight);
/**
* Returns the picks of all origins of an event with
* given eventID.
* @param eventID The event's publicID
* @return An iterator to iterate over the picks where the
* publicID is unique in the result set.
*/
DatabaseIterator getEventPicks(const std::string& eventID);
/**
* Returns the picks of all origins of an event with
* given publicID and with weight greater a given weight
* @param publicID The event's publicID (eventID)
* @param weight The minimum weight for an arrival
* @return An iterator to iterator over the result ID's
* that are unique in the result set.
*/
DatabaseIterator getEventPicksByWeight(const std::string& publicID,
double weight);
/**
* Returns the ConfigModule objects by name and state.
*/
DatabaseIterator getConfigModule(const std::string& name,
bool enabled);
/**
*/
DatabaseIterator getEquivalentPick(const std::string& stationCode,
const std::string& networkCode,
const std::string& locationCode,
const std::string& channelCode,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime);
/**
* Returns all journal entries for a particular PublicObject.
*/
DatabaseIterator getJournal(const std::string& objectID);
/**
* Returns all journal entries for a particular PublicObject
* related to an action.
*/
DatabaseIterator getJournalAction(const std::string& objectID,
const std::string& action);
DatabaseIterator getArclinkRequestByStreamCode(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& networkCode,
const std::string& stationCode,
const std::string& locationCode,
const std::string& channelCode,
const std::string& type);
DatabaseIterator getArclinkRequestByRequestID(const std::string& requestID);
DatabaseIterator getArclinkRequestByUserID(const std::string& userID,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& type);
DatabaseIterator getArclinkRequestByTime(Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& type);
DatabaseIterator getArclinkRequest(const std::string& userID,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& networkCode,
const std::string& stationCode,
const std::string& locationCode,
const std::string& channelCode,
const std::string& type,
const std::string& netClass);
DatabaseIterator getArclinkRequestRestricted(const std::string& userID,
Seiscomp::Core::Time startTime,
Seiscomp::Core::Time endTime,
const std::string& networkCode,
const std::string& stationCode,
const std::string& locationCode,
const std::string& channelCode,
const std::string& type,
const std::string& netClass,
bool restricted);
};
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
#endif