mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 13:00:06 +00:00
AWS Level 2 Provider FindKey
This commit is contained in:
parent
80310029e5
commit
bde8d288bd
5 changed files with 90 additions and 1 deletions
|
|
@ -7,6 +7,32 @@ namespace scwx
|
|||
namespace provider
|
||||
{
|
||||
|
||||
TEST(AwsLevel2DataProvider, FindKeyFixed)
|
||||
{
|
||||
using namespace std::chrono;
|
||||
using sys_days = time_point<system_clock, days>;
|
||||
|
||||
const auto date = sys_days {2021y / May / 27d};
|
||||
const auto time = date + 17h + 59min;
|
||||
|
||||
AwsLevel2DataProvider provider("KLSX");
|
||||
|
||||
provider.ListObjects(date);
|
||||
std::string key = provider.FindKey(time);
|
||||
|
||||
EXPECT_EQ(key, "2021/05/27/KLSX/KLSX20210527_175717_V06");
|
||||
}
|
||||
|
||||
TEST(AwsLevel2DataProvider, FindKeyNow)
|
||||
{
|
||||
AwsLevel2DataProvider provider("KLSX");
|
||||
|
||||
provider.Refresh();
|
||||
std::string key = provider.FindKey(std::chrono::system_clock::now());
|
||||
|
||||
EXPECT_GT(key.size(), 0);
|
||||
}
|
||||
|
||||
TEST(AwsLevel2DataProvider, LoadObjectByKey)
|
||||
{
|
||||
const std::string key = "2022/04/21/KLSX/KLSX20220421_160055_V06";
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ public:
|
|||
|
||||
size_t cache_size() const;
|
||||
|
||||
std::string FindKey(std::chrono::system_clock::time_point time);
|
||||
size_t ListObjects(std::chrono::system_clock::time_point date);
|
||||
std::shared_ptr<wsr88d::Ar2vFile> LoadObjectByKey(const std::string& key);
|
||||
void Refresh();
|
||||
|
|
|
|||
41
wxdata/include/scwx/util/map.hpp
Normal file
41
wxdata/include/scwx/util/map.hpp
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <optional>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
|
||||
template<class Key, class T>
|
||||
std::optional<T> GetBoundedElement(std::map<Key, T>& map, Key key)
|
||||
{
|
||||
std::optional<T> element = std::nullopt;
|
||||
|
||||
// Find the first element greater than the key requested
|
||||
auto it = map.upper_bound(key);
|
||||
|
||||
// An element with a key greater was found
|
||||
if (it != map.cend())
|
||||
{
|
||||
// Are there elements prior to this element?
|
||||
if (it != map.cbegin())
|
||||
{
|
||||
// Get the element immediately preceding, this the element we are
|
||||
// looking for
|
||||
element = (--it)->second;
|
||||
}
|
||||
}
|
||||
else if (map.size() > 0)
|
||||
{
|
||||
// An element with a key greater was not found. If it exists, it must be
|
||||
// the last element.
|
||||
element = map.rbegin()->second;
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
} // namespace util
|
||||
} // namespace scwx
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
#include <scwx/provider/aws_level2_data_provider.hpp>
|
||||
#include <scwx/util/logger.hpp>
|
||||
#include <scwx/util/map.hpp>
|
||||
#include <scwx/util/time.hpp>
|
||||
#include <scwx/wsr88d/nexrad_file_factory.hpp>
|
||||
|
||||
#include <shared_mutex>
|
||||
|
|
@ -76,6 +78,24 @@ size_t AwsLevel2DataProvider::cache_size() const
|
|||
return p->objects_.size();
|
||||
}
|
||||
|
||||
std::string
|
||||
AwsLevel2DataProvider::FindKey(std::chrono::system_clock::time_point time)
|
||||
{
|
||||
logger_->debug("FindKey: {}", util::TimeString(time));
|
||||
|
||||
std::string key {};
|
||||
|
||||
std::optional<std::string> element =
|
||||
util::GetBoundedElement(p->objects_, time);
|
||||
|
||||
if (element.has_value())
|
||||
{
|
||||
key = *element;
|
||||
}
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
size_t
|
||||
AwsLevel2DataProvider::ListObjects(std::chrono::system_clock::time_point date)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ set(SRC_PROVIDER source/scwx/provider/aws_level2_data_provider.cpp)
|
|||
set(HDR_UTIL include/scwx/util/float.hpp
|
||||
include/scwx/util/iterator.hpp
|
||||
include/scwx/util/logger.hpp
|
||||
include/scwx/util/map.hpp
|
||||
include/scwx/util/rangebuf.hpp
|
||||
include/scwx/util/streams.hpp
|
||||
include/scwx/util/threads.hpp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue