terrama2::services::alert::core::AdditionalDataHelper::AdditionalDataHelper(AdditionalData additionalData, DataManagerPtr dataManager)
  : additionalData_(additionalData)
{
  dataSeries_ = dataManager->findDataSeries(additionalData.id);
  dataProvider_ = dataManager->findDataProvider(dataSeries_->dataProviderId);
  remover_ = std::make_shared<terrama2::core::FileRemover>();
}
Example #2
0
void terrama2::core::erasePreviousResult(DataManagerPtr dataManager, DataSeriesId dataSeriesId, std::shared_ptr<te::dt::TimeInstantTZ> startTime)
{
  auto outputDataSeries = dataManager->findDataSeries(dataSeriesId);
  if(!outputDataSeries)
  {
    TERRAMA2_LOG_ERROR() << QObject::tr("Invalid output data series for analysis.");
    return;
  }
  auto outputDataProvider = dataManager->findDataProvider(outputDataSeries->dataProviderId);
  if(!outputDataProvider)
  {
    TERRAMA2_LOG_ERROR() << QObject::tr("Invalid output data provider for analysis.");
    return;
  }

  if(outputDataProvider->dataProviderType == "POSTGIS")
  {
    auto dataset = outputDataSeries->datasetList[0];
    std::string tableName = getTableNameProperty(dataset);

    std::shared_ptr<te::da::DataSource> datasource(te::da::DataSourceFactory::make("POSTGIS", outputDataProvider->uri));

    // RAII for open/closing the datasource
    terrama2::core::OpenClose<std::shared_ptr<te::da::DataSource> > openClose(datasource);

    if(!datasource->isOpened())
    {
      QString errMsg = QObject::tr("DataProvider could not be opened.");
      TERRAMA2_LOG_ERROR() << errMsg;
      throw Exception() << ErrorDescription(errMsg);
    }

    // get a transactor to interact to the data source
    std::shared_ptr<te::da::DataSourceTransactor> transactor(datasource->getTransactor());

    auto dataSetNames = transactor->getDataSetNames();

    if(std::find(dataSetNames.cbegin(), dataSetNames.cend(), tableName) != dataSetNames.cend() ||
       std::find(dataSetNames.cbegin(), dataSetNames.cend(), "public."+tableName) != dataSetNames.cend())
      transactor->execute("delete from " + tableName + " where execution_date = '" + startTime->toString() + "'");
  }
  else
  {
    QString errMsg = QObject::tr("Removing old results not implement for this dataseries format.");
    TERRAMA2_LOG_ERROR() << errMsg;
  }
}
Example #3
0
std::set<std::string> terrama2::services::analysis::core::verify::dataAvailable(DataManagerPtr dataManager, AnalysisPtr analysis)
{
  std::set<std::string> vecMessages;
  for(auto& analysisDataSeries : analysis->analysisDataSeriesList)
  {

    auto dataSeries = dataManager->findDataSeries(analysisDataSeries.dataSeriesId);
    auto dataProvider = dataManager->findDataProvider(dataSeries->dataProviderId);

    auto dataAccesor = terrama2::core::DataAccessorFactory::getInstance().make(dataProvider, dataSeries);

    try
    {
      terrama2::core::Filter filter;
      auto series = dataAccesor->getSeries(filter, nullptr);

      if(series.empty())
      {
        QString errMsg = QObject::tr("No data available for data series '%1'.").arg(dataSeries->name.c_str());
        TERRAMA2_LOG_WARNING() << errMsg;
        vecMessages.insert(vecMessages.end(), errMsg.toStdString());
      }
    }
    catch(const terrama2::core::NoDataException&)
    {
      QString errMsg = QObject::tr("No data available for data series '%1'.").arg(dataSeries->name.c_str());
      TERRAMA2_LOG_WARNING() << errMsg;
      vecMessages.insert(vecMessages.end(), errMsg.toStdString());
    }
    catch(const terrama2::Exception& e)
    {
      std::string errMsg = boost::get_error_info<terrama2::ErrorDescription>(e)->toStdString();
      vecMessages.insert(vecMessages.end(), errMsg);
      TERRAMA2_LOG_ERROR() << errMsg;
    }
  }

  return vecMessages;
}
Example #4
0
std::set<std::string> terrama2::services::analysis::core::verify::inactiveDataSeries(DataManagerPtr dataManager, AnalysisPtr analysis)
{
  std::set<std::string> vecMessages;
  for(auto& analysisDataSeries : analysis->analysisDataSeriesList)
  {
    auto dataSeries = dataManager->findDataSeries(analysisDataSeries.dataSeriesId);
    if(!dataSeries->active)
    {
      QString errMsg = QObject::tr("Data series '%1' is inactive.").arg(dataSeries->name.c_str());
      TERRAMA2_LOG_WARNING() << errMsg;
      vecMessages.insert(errMsg.toStdString());
    }
  }

  return vecMessages;
}
Example #5
0
std::set<std::string> terrama2::services::analysis::core::verify::attributeIdentifier(DataManagerPtr dataManager, AnalysisPtr analysis)
{
  std::set<std::string> vecMessages;
  if(analysis->type == AnalysisType::MONITORED_OBJECT_TYPE)
  {
    for(auto analysisDataSeries : analysis->analysisDataSeriesList)
    {
      if(analysisDataSeries.type == AnalysisDataSeriesType::DATASERIES_MONITORED_OBJECT_TYPE)
      {

        auto dataSeries = dataManager->findDataSeries(analysisDataSeries.dataSeriesId);
        auto dataProvider = dataManager->findDataProvider(dataSeries->dataProviderId);

        std::string identifier = analysisDataSeries.metadata["identifier"];

        auto dataAccesor = terrama2::core::DataAccessorFactory::getInstance().make(dataProvider, dataSeries);
        try
        {
          terrama2::core::Filter filter;
          auto series = dataAccesor->getSeries(filter, nullptr);

          if(!series.empty())
          {
            auto it = series.begin();
            if(it != series.end())
            {
              if(!it->second.teDataSetType)
              {
                QString errMsg = QObject::tr("Could not read dataset type for data series '%1'.").arg(dataSeries->name.c_str());
                TERRAMA2_LOG_WARNING() << errMsg;
                vecMessages.insert(vecMessages.end(), errMsg.toStdString());
              }
              auto property = it->second.teDataSetType->getProperty(identifier);
              if(property == nullptr)
              {
                QString errMsg = QObject::tr("Could not find the attribute identifier '%1' in data series '%2'.").arg(QString::fromStdString(identifier), QString::fromStdString(dataSeries->name));
                TERRAMA2_LOG_WARNING() << errMsg;
                vecMessages.insert(vecMessages.end(), errMsg.toStdString());
              }
            }
            else
            {
              throw new terrama2::core::NoDataException();
            }
          }
        }
        catch(const terrama2::core::NoDataException&)
        {
          QString errMsg = QObject::tr("No data available for data series '%1'.").arg(dataSeries->name.c_str());
          TERRAMA2_LOG_WARNING() << errMsg;
          vecMessages.insert(vecMessages.end(), errMsg.toStdString());
        }
        catch(const terrama2::Exception& e)
        {
          std::string errMsg = boost::get_error_info<terrama2::ErrorDescription>(e)->toStdString();
          vecMessages.insert(vecMessages.end(), errMsg);
          TERRAMA2_LOG_ERROR() << errMsg;
        }

      }
    }
  }

  return vecMessages;
}