2024-11-24 00:58:06 +00:00
|
|
|
|
#include "ToMinioSrvEngine.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ToMinioSrvEngine::ToMinioSrvEngine() {}
|
|
|
|
|
|
|
|
|
|
|
|
ToMinioSrvEngine::~ToMinioSrvEngine() {}
|
|
|
|
|
|
|
|
|
|
|
|
APP_ERROR ToMinioSrvEngine::Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
|
|
|
|
|
|
|
|
|
|
|
|
this->minioConfig_ = Config::getins()->getMinioConfig();
|
|
|
|
|
|
this->baseConfig_ = Config::getins()->getBaseConfig();
|
|
|
|
|
|
|
|
|
|
|
|
Aws::InitAPI(options_);
|
|
|
|
|
|
Aws::Client::ClientConfiguration config;
|
|
|
|
|
|
config.scheme = !this->minioConfig_.strUrl.rfind("https", 0) ?
|
|
|
|
|
|
Aws::Http::Scheme::HTTPS : Aws::Http::Scheme::HTTP;
|
|
|
|
|
|
std::string::size_type index = this->minioConfig_.strUrl.rfind("/");
|
|
|
|
|
|
config.endpointOverride = (std::string::npos == index) ? this->minioConfig_.strUrl : this->minioConfig_.strUrl.substr(index + 1, this->minioConfig_.strUrl.size() - index - 1);
|
|
|
|
|
|
config.verifySSL = false;
|
|
|
|
|
|
client_ = new Aws::S3::S3Client(Aws::Auth::AWSCredentials(this->minioConfig_.strAccessKey,
|
|
|
|
|
|
this->minioConfig_.strSecretKey),
|
|
|
|
|
|
config,
|
|
|
|
|
|
Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never,
|
|
|
|
|
|
false);
|
|
|
|
|
|
|
|
|
|
|
|
LogInfo << "ToMinioSrvEngine Init ok";
|
|
|
|
|
|
return APP_ERR_OK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
APP_ERROR ToMinioSrvEngine::DeInit()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (client_ != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete client_;
|
|
|
|
|
|
client_ = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
Aws::ShutdownAPI(options_);
|
|
|
|
|
|
LogInfo << "ToMinioSrvEngine DeInit ok";
|
|
|
|
|
|
return APP_ERR_OK;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Create bucket in S3 server
|
|
|
|
|
|
* inParam : bucketName The bucket name to which the CREATE action was initiated.
|
|
|
|
|
|
* outParam: N/A
|
|
|
|
|
|
* return : true in case of success, false in case of failure
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool ToMinioSrvEngine::CreateBucket(const std::string &strBucketName)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogDebug << "strBucketName:" << strBucketName;
|
|
|
|
|
|
Aws::S3::Model::CreateBucketRequest request;
|
|
|
|
|
|
request.WithBucket(strBucketName);
|
|
|
|
|
|
auto result = client_->CreateBucket(request);
|
|
|
|
|
|
if (!result.IsSuccess())
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError << "CreateBucket error: " << result.GetError().GetExceptionName() << " " << result.GetError().GetMessage();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Delete bucket on S3 server
|
|
|
|
|
|
* inParam : bucketName The bucket name to which the DELETE action was initiated.
|
|
|
|
|
|
* outParam: N/A
|
|
|
|
|
|
* return : true in case of success, false in case of failure
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool ToMinioSrvEngine::DeleteBucket(const std::string &strBucketName)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogDebug << "strBucketName:" << strBucketName;
|
|
|
|
|
|
Aws::S3::Model::DeleteBucketRequest request;
|
|
|
|
|
|
request.WithBucket(strBucketName);
|
|
|
|
|
|
auto result = client_->DeleteBucket(request);
|
|
|
|
|
|
if (!result.IsSuccess())
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError << "DeleteBucket error: " << result.GetError().GetExceptionName() << " " << result.GetError().GetMessage();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Push file to S3 server
|
|
|
|
|
|
* inParam : std::string strBucketName bucket name
|
|
|
|
|
|
* : std::string strObjectKey File name in bucket.
|
|
|
|
|
|
* : std::string strPathkey Local file path.
|
|
|
|
|
|
* outParam: N/A
|
|
|
|
|
|
* return : true in case of success, false in case of failure
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool ToMinioSrvEngine::PutObject(std::string strBucketName, std::string strObjectKey, std::string strPathkey)
|
|
|
|
|
|
{
|
|
|
|
|
|
// LogDebug << "strBucketName:" << strBucketName;
|
|
|
|
|
|
Aws::S3::Model::PutObjectRequest request;
|
|
|
|
|
|
request.WithBucket(strBucketName).WithKey(strObjectKey);
|
|
|
|
|
|
auto inputData = Aws::MakeShared<Aws::FStream>("PutObjectInputStream", strPathkey.c_str(), std::ios_base::in | std::ios_base::binary);
|
|
|
|
|
|
request.SetBody(inputData);
|
|
|
|
|
|
auto result = client_->PutObject(request);
|
|
|
|
|
|
if (!result.IsSuccess())
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError << "PutObject error: " << result.GetError().GetExceptionName() << " " << result.GetError().GetMessage();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Delete file on S3 server
|
|
|
|
|
|
* inParam : std::string strBucketName bucket name
|
|
|
|
|
|
* : std::string strObjectKey File name in bucket.
|
|
|
|
|
|
* outParam: N/A
|
|
|
|
|
|
* return : true in case of success, false in case of failure
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool ToMinioSrvEngine::DeleteObject(std::string strBucketName, std::string strObjectKey)
|
|
|
|
|
|
{
|
|
|
|
|
|
Aws::S3::Model::DeleteObjectRequest request;
|
|
|
|
|
|
request.WithBucket(strBucketName).WithKey(strObjectKey);
|
|
|
|
|
|
auto result = client_->DeleteObject(request);
|
|
|
|
|
|
if (!result.IsSuccess())
|
|
|
|
|
|
{
|
|
|
|
|
|
LogError << "DeleteObject error: " << result.GetError().GetExceptionName() << " " << result.GetError().GetMessage();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
APP_ERROR ToMinioSrvEngine::Process()
|
|
|
|
|
|
{
|
|
|
|
|
|
int iRet = APP_ERR_OK;
|
|
|
|
|
|
|
|
|
|
|
|
while (!isStop_)
|
|
|
|
|
|
{
|
|
|
|
|
|
//pop端口0,图片
|
|
|
|
|
|
std::shared_ptr<void> pVoidData0 = nullptr;
|
|
|
|
|
|
inputQueMap_[strPort0_]->pop(pVoidData0);
|
|
|
|
|
|
|
|
|
|
|
|
if (nullptr == pVoidData0)
|
|
|
|
|
|
{
|
|
|
|
|
|
usleep(1000); //1ms
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this->minioConfig_.bIsUse)
|
|
|
|
|
|
{
|
|
|
|
|
|
usleep(1000); //1ms
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<DetectResultData> pDetectResultData = std::static_pointer_cast<DetectResultData>(pVoidData0);
|
|
|
|
|
|
|
|
|
|
|
|
std::string strFilePath = pDetectResultData->strDetectDate + "/"
|
|
|
|
|
|
+ ai_matrix::StringUtil::getins()->replace_all_distinct(pDetectResultData->strDetectTime, ":", "-")
|
|
|
|
|
|
+ "/";
|
|
|
|
|
|
for (auto & it : pDetectResultData->vecImage)
|
|
|
|
|
|
{
|
2024-11-26 06:40:12 +00:00
|
|
|
|
std::string strLocalPath, strMinIoPath;
|
|
|
|
|
|
strLocalPath.append(this->baseConfig_.strDebugResultPath)
|
|
|
|
|
|
.append(std::string("/"))
|
|
|
|
|
|
.append(strFilePath)
|
|
|
|
|
|
.append(it);
|
|
|
|
|
|
strMinIoPath.append(strFilePath)
|
|
|
|
|
|
.append(it);
|
|
|
|
|
|
|
2024-11-24 00:58:06 +00:00
|
|
|
|
if (!PutObject(this->minioConfig_.strBucket,
|
2024-11-26 06:40:12 +00:00
|
|
|
|
strMinIoPath,
|
|
|
|
|
|
strLocalPath))
|
2024-11-24 00:58:06 +00:00
|
|
|
|
{
|
2024-11-26 06:40:12 +00:00
|
|
|
|
LogWarn << "数据上传失败! -- " << this->baseConfig_.strDebugResultPath;
|
2024-11-24 00:58:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-11-26 06:40:12 +00:00
|
|
|
|
LogInfo << "数据上传MinIO 成功!!"
|
|
|
|
|
|
<< this->minioConfig_.strBucket + strMinIoPath
|
2024-11-24 00:58:06 +00:00
|
|
|
|
<< " -->"
|
2024-11-26 06:40:12 +00:00
|
|
|
|
<< strLocalPath;
|
2024-11-24 00:58:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return APP_ERR_OK;
|
|
|
|
|
|
}
|