sg_client/sg_job_submitter.cpp¶
Dispatches GNUS schema JSON directly to GeniusSDKProcess. More...
Namespaces¶
| Name |
|---|
| sgns |
| sgns::neoswarm |
| sgns::neoswarm::network |
Detailed Description¶
Dispatches GNUS schema JSON directly to GeniusSDKProcess.
Date: 2026-05-28
Source code¶
#include "sg_job_submitter.hpp"
#include "common/logging.hpp"
#include "GeniusSDK.h"
#include <chrono>
#include <iomanip>
#include <random>
#include <sstream>
namespace sgns::neoswarm::network
{
namespace
{
auto SubmitLogger()
{
return CreateLogger( "NeoSwarm/SGSubmit" );
}
std::string GenerateTaskId()
{
auto now = std::chrono::steady_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>( now.time_since_epoch() ).count();
std::random_device rd;
std::mt19937 gen( rd() );
std::uniform_int_distribution<uint32_t> dist;
std::ostringstream oss;
oss << "task-" << std::hex << ms << "-" << dist( gen );
return oss.str();
}
} // namespace
outcome::result<std::string> SGJobSubmitter::PublishJob( const std::string& gnusSchemaJson )
{
std::string taskId = GenerateTaskId();
if ( gnusSchemaJson.size() >= sizeof( JsonData_t ) )
{
SubmitLogger()->error( "Task payload too large for GeniusSDK ({} bytes, max {})",
gnusSchemaJson.size(), sizeof( JsonData_t ) - 1 );
return outcome::failure( Error::InvalidArgument );
}
SubmitLogger()->info( "Publishing task {} ({} bytes)", taskId, gnusSchemaJson.size() );
auto sdkResult = GeniusSDKProcess( gnusSchemaJson.c_str() );
if ( sdkResult != GENIUS_NODE_RET_OK )
{
SubmitLogger()->error( "GeniusSDKProcess failed: error code {}", static_cast<int>( sdkResult ) );
return outcome::failure( Error::NetworkError );
}
SubmitLogger()->info( "Task {} dispatched via GeniusSDK", taskId );
return taskId;
}
SGJobSubmitter::~SGJobSubmitter() = default;
} // namespace sgns::neoswarm::network
Updated on 2026-07-25 at 22:56:57 +0000