From ce3533022d072bd00815662072a7a2204b82179f Mon Sep 17 00:00:00 2001 From: kn Date: Thu, 23 Oct 2025 09:35:53 +0200 Subject: [PATCH] Add GetCreatedTimestamp and GetLastExecutionTimestamp to Build interface --- ACT/LibMCEnv.xml | 8 ++ .../HeadersDev/CppDynamic/libmcenv_dynamic.h | 24 +++++ .../CppDynamic/libmcenv_dynamic.hpp | 60 +++++++++++ Framework/InterfacesCore/libmcenv_abi.hpp | 45 ++++++++ .../InterfacesCore/libmcenv_interfaces.hpp | 12 +++ .../libmcenv_interfacewrapper.cpp | 100 ++++++++++++++++++ Implementation/LibMCEnv/libmcenv_build.cpp | 33 ++++++ Implementation/LibMCEnv/libmcenv_build.hpp | 4 + 8 files changed, 286 insertions(+) diff --git a/ACT/LibMCEnv.xml b/ACT/LibMCEnv.xml index 4cdd6085..89236aa2 100644 --- a/ACT/LibMCEnv.xml +++ b/ACT/LibMCEnv.xml @@ -2602,6 +2602,14 @@ + + + + + + + + diff --git a/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.h b/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.h index b2b1a1eb..789c8ed2 100644 --- a/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.h +++ b/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.h @@ -4260,6 +4260,28 @@ typedef LibMCEnvResult (*PLibMCEnvBuild_GetNamePtr) (LibMCEnv_Build pBuild, cons */ typedef LibMCEnvResult (*PLibMCEnvBuild_GetBuildUUIDPtr) (LibMCEnv_Build pBuild, const LibMCEnv_uint32 nBuildUUIDBufferSize, LibMCEnv_uint32* pBuildUUIDNeededChars, char * pBuildUUIDBuffer); +/** +* Returns creation timestamp of the build in ISO-8601 format. +* +* @param[in] pBuild - Build instance. +* @param[in] nTimestampBufferSize - size of the buffer (including trailing 0) +* @param[out] pTimestampNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTimestampBuffer - buffer of Creation timestamp in ISO-8601 format (e.g., 2025-10-23T14:30:00.000Z)., may be NULL +* @return error code or 0 (success) +*/ +typedef LibMCEnvResult (*PLibMCEnvBuild_GetCreatedTimestampPtr) (LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer); + +/** +* Returns the most recent execution timestamp in ISO-8601 format. Returns empty string if build has never been executed. +* +* @param[in] pBuild - Build instance. +* @param[in] nTimestampBufferSize - size of the buffer (including trailing 0) +* @param[out] pTimestampNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTimestampBuffer - buffer of Most recent execution timestamp in ISO-8601 format. Empty string if never executed., may be NULL +* @return error code or 0 (success) +*/ +typedef LibMCEnvResult (*PLibMCEnvBuild_GetLastExecutionTimestampPtr) (LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer); + /** * Returns storage uuid of the build stream. * @@ -11406,6 +11428,8 @@ typedef struct { PLibMCEnvBuildExecutionIterator_GetCurrentExecutionPtr m_BuildExecutionIterator_GetCurrentExecution; PLibMCEnvBuild_GetNamePtr m_Build_GetName; PLibMCEnvBuild_GetBuildUUIDPtr m_Build_GetBuildUUID; + PLibMCEnvBuild_GetCreatedTimestampPtr m_Build_GetCreatedTimestamp; + PLibMCEnvBuild_GetLastExecutionTimestampPtr m_Build_GetLastExecutionTimestamp; PLibMCEnvBuild_GetStorageUUIDPtr m_Build_GetStorageUUID; PLibMCEnvBuild_GetStorageSHA256Ptr m_Build_GetStorageSHA256; PLibMCEnvBuild_EnsureStorageSHA256IsValidPtr m_Build_EnsureStorageSHA256IsValid; diff --git a/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.hpp b/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.hpp index c3ae0567..08fdb74c 100644 --- a/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.hpp +++ b/Framework/HeadersDev/CppDynamic/libmcenv_dynamic.hpp @@ -2248,6 +2248,8 @@ class CBuild : public CBase { inline std::string GetName(); inline std::string GetBuildUUID(); + inline std::string GetCreatedTimestamp(); + inline std::string GetLastExecutionTimestamp(); inline std::string GetStorageUUID(); inline std::string GetStorageSHA256(); inline void EnsureStorageSHA256IsValid(); @@ -4023,6 +4025,8 @@ class CUIEnvironment : public CBase { pWrapperTable->m_BuildExecutionIterator_GetCurrentExecution = nullptr; pWrapperTable->m_Build_GetName = nullptr; pWrapperTable->m_Build_GetBuildUUID = nullptr; + pWrapperTable->m_Build_GetCreatedTimestamp = nullptr; + pWrapperTable->m_Build_GetLastExecutionTimestamp = nullptr; pWrapperTable->m_Build_GetStorageUUID = nullptr; pWrapperTable->m_Build_GetStorageSHA256 = nullptr; pWrapperTable->m_Build_EnsureStorageSHA256IsValid = nullptr; @@ -8250,6 +8254,24 @@ class CUIEnvironment : public CBase { if (pWrapperTable->m_Build_GetBuildUUID == nullptr) return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 + pWrapperTable->m_Build_GetCreatedTimestamp = (PLibMCEnvBuild_GetCreatedTimestampPtr) GetProcAddress(hLibrary, "libmcenv_build_getcreatedtimestamp"); + #else // _WIN32 + pWrapperTable->m_Build_GetCreatedTimestamp = (PLibMCEnvBuild_GetCreatedTimestampPtr) dlsym(hLibrary, "libmcenv_build_getcreatedtimestamp"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Build_GetCreatedTimestamp == nullptr) + return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + + #ifdef _WIN32 + pWrapperTable->m_Build_GetLastExecutionTimestamp = (PLibMCEnvBuild_GetLastExecutionTimestampPtr) GetProcAddress(hLibrary, "libmcenv_build_getlastexecutiontimestamp"); + #else // _WIN32 + pWrapperTable->m_Build_GetLastExecutionTimestamp = (PLibMCEnvBuild_GetLastExecutionTimestampPtr) dlsym(hLibrary, "libmcenv_build_getlastexecutiontimestamp"); + dlerror(); + #endif // _WIN32 + if (pWrapperTable->m_Build_GetLastExecutionTimestamp == nullptr) + return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + #ifdef _WIN32 pWrapperTable->m_Build_GetStorageUUID = (PLibMCEnvBuild_GetStorageUUIDPtr) GetProcAddress(hLibrary, "libmcenv_build_getstorageuuid"); #else // _WIN32 @@ -15521,6 +15543,14 @@ class CUIEnvironment : public CBase { if ( (eLookupError != 0) || (pWrapperTable->m_Build_GetBuildUUID == nullptr) ) return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + eLookupError = (*pLookup)("libmcenv_build_getcreatedtimestamp", (void**)&(pWrapperTable->m_Build_GetCreatedTimestamp)); + if ( (eLookupError != 0) || (pWrapperTable->m_Build_GetCreatedTimestamp == nullptr) ) + return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + + eLookupError = (*pLookup)("libmcenv_build_getlastexecutiontimestamp", (void**)&(pWrapperTable->m_Build_GetLastExecutionTimestamp)); + if ( (eLookupError != 0) || (pWrapperTable->m_Build_GetLastExecutionTimestamp == nullptr) ) + return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; + eLookupError = (*pLookup)("libmcenv_build_getstorageuuid", (void**)&(pWrapperTable->m_Build_GetStorageUUID)); if ( (eLookupError != 0) || (pWrapperTable->m_Build_GetStorageUUID == nullptr) ) return LIBMCENV_ERROR_COULDNOTFINDLIBRARYEXPORT; @@ -23347,6 +23377,36 @@ class CUIEnvironment : public CBase { return std::string(&bufferBuildUUID[0]); } + /** + * CBuild::GetCreatedTimestamp - Returns creation timestamp of the build in ISO-8601 format. + * @return Creation timestamp in ISO-8601 format (e.g., 2025-10-23T14:30:00.000Z). + */ + std::string CBuild::GetCreatedTimestamp() + { + LibMCEnv_uint32 bytesNeededTimestamp = 0; + LibMCEnv_uint32 bytesWrittenTimestamp = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Build_GetCreatedTimestamp(m_pHandle, 0, &bytesNeededTimestamp, nullptr)); + std::vector bufferTimestamp(bytesNeededTimestamp); + CheckError(m_pWrapper->m_WrapperTable.m_Build_GetCreatedTimestamp(m_pHandle, bytesNeededTimestamp, &bytesWrittenTimestamp, &bufferTimestamp[0])); + + return std::string(&bufferTimestamp[0]); + } + + /** + * CBuild::GetLastExecutionTimestamp - Returns the most recent execution timestamp in ISO-8601 format. Returns empty string if build has never been executed. + * @return Most recent execution timestamp in ISO-8601 format. Empty string if never executed. + */ + std::string CBuild::GetLastExecutionTimestamp() + { + LibMCEnv_uint32 bytesNeededTimestamp = 0; + LibMCEnv_uint32 bytesWrittenTimestamp = 0; + CheckError(m_pWrapper->m_WrapperTable.m_Build_GetLastExecutionTimestamp(m_pHandle, 0, &bytesNeededTimestamp, nullptr)); + std::vector bufferTimestamp(bytesNeededTimestamp); + CheckError(m_pWrapper->m_WrapperTable.m_Build_GetLastExecutionTimestamp(m_pHandle, bytesNeededTimestamp, &bytesWrittenTimestamp, &bufferTimestamp[0])); + + return std::string(&bufferTimestamp[0]); + } + /** * CBuild::GetStorageUUID - Returns storage uuid of the build stream. * @return Storage UUID of the build. diff --git a/Framework/InterfacesCore/libmcenv_abi.hpp b/Framework/InterfacesCore/libmcenv_abi.hpp index 6cbced6e..8a342d1f 100644 --- a/Framework/InterfacesCore/libmcenv_abi.hpp +++ b/Framework/InterfacesCore/libmcenv_abi.hpp @@ -4247,6 +4247,19 @@ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_buildexecution_loadattachedjournal(Lib */ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_buildexecutioniterator_getcurrentexecution(LibMCEnv_BuildExecutionIterator pBuildExecutionIterator, LibMCEnv_BuildExecution * pBuildExecutionInstance); +/************************************************************************************************************************* + Class definition for BuildIterator +**************************************************************************************************************************/ + +/** +* Returns the build the iterator points at. +* +* @param[in] pBuildIterator - BuildIterator instance. +* @param[out] pBuildInstance - returns the Build instance. +* @return error code or 0 (success) +*/ +LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_builditerator_getcurrentbuild(LibMCEnv_BuildIterator pBuildIterator, LibMCEnv_Build * pBuildInstance); + /************************************************************************************************************************* Class definition for Build **************************************************************************************************************************/ @@ -4273,6 +4286,28 @@ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_build_getname(LibMCEnv_Build pBuild, c */ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_build_getbuilduuid(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nBuildUUIDBufferSize, LibMCEnv_uint32* pBuildUUIDNeededChars, char * pBuildUUIDBuffer); +/** +* Returns creation timestamp of the build in ISO-8601 format. +* +* @param[in] pBuild - Build instance. +* @param[in] nTimestampBufferSize - size of the buffer (including trailing 0) +* @param[out] pTimestampNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTimestampBuffer - buffer of Creation timestamp in ISO-8601 format (e.g., 2025-10-23T14:30:00.000Z)., may be NULL +* @return error code or 0 (success) +*/ +LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_build_getcreatedtimestamp(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer); + +/** +* Returns the most recent execution timestamp in ISO-8601 format. Returns empty string if build has never been executed. +* +* @param[in] pBuild - Build instance. +* @param[in] nTimestampBufferSize - size of the buffer (including trailing 0) +* @param[out] pTimestampNeededChars - will be filled with the count of the written bytes, or needed buffer size. +* @param[out] pTimestampBuffer - buffer of Most recent execution timestamp in ISO-8601 format. Empty string if never executed., may be NULL +* @return error code or 0 (success) +*/ +LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_build_getlastexecutiontimestamp(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer); + /** * Returns storage uuid of the build stream. * @@ -10600,6 +10635,16 @@ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_uienvironment_hasbuildexecution(LibMCE */ LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_uienvironment_getbuildexecution(LibMCEnv_UIEnvironment pUIEnvironment, const char * pExecutionUUID, LibMCEnv_BuildExecution * pExecutionInstance); +/** +* Returns an iterator for recent build jobs, ordered by timestamp (newest first). +* +* @param[in] pUIEnvironment - UIEnvironment instance. +* @param[in] nMaxCount - Maximum number of jobs to return. Must be greater than 0. +* @param[out] pBuildIterator - Iterator for build jobs, ordered newest first. +* @return error code or 0 (success) +*/ +LIBMCENV_DECLSPEC LibMCEnvResult libmcenv_uienvironment_getrecentbuildjobs(LibMCEnv_UIEnvironment pUIEnvironment, LibMCEnv_uint32 nMaxCount, LibMCEnv_BuildIterator * pBuildIterator); + /** * Creates an empty discrete field. * diff --git a/Framework/InterfacesCore/libmcenv_interfaces.hpp b/Framework/InterfacesCore/libmcenv_interfaces.hpp index c655dd7a..a73ca078 100644 --- a/Framework/InterfacesCore/libmcenv_interfaces.hpp +++ b/Framework/InterfacesCore/libmcenv_interfaces.hpp @@ -3535,6 +3535,18 @@ class IBuild : public virtual IBase { */ virtual std::string GetBuildUUID() = 0; + /** + * IBuild::GetCreatedTimestamp - Returns creation timestamp of the build in ISO-8601 format. + * @return Creation timestamp in ISO-8601 format (e.g., 2025-10-23T14:30:00.000Z). + */ + virtual std::string GetCreatedTimestamp() = 0; + + /** + * IBuild::GetLastExecutionTimestamp - Returns the most recent execution timestamp in ISO-8601 format. Returns empty string if build has never been executed. + * @return Most recent execution timestamp in ISO-8601 format. Empty string if never executed. + */ + virtual std::string GetLastExecutionTimestamp() = 0; + /** * IBuild::GetStorageUUID - Returns storage uuid of the build stream. * @return Storage UUID of the build. diff --git a/Framework/InterfacesCore/libmcenv_interfacewrapper.cpp b/Framework/InterfacesCore/libmcenv_interfacewrapper.cpp index 2dcd6043..77328a47 100644 --- a/Framework/InterfacesCore/libmcenv_interfacewrapper.cpp +++ b/Framework/InterfacesCore/libmcenv_interfacewrapper.cpp @@ -12286,6 +12286,102 @@ LibMCEnvResult libmcenv_build_getbuilduuid(LibMCEnv_Build pBuild, const LibMCEnv } } +LibMCEnvResult libmcenv_build_getcreatedtimestamp(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer) +{ + IBase* pIBaseClass = (IBase *)pBuild; + + try { + if ( (!pTimestampBuffer) && !(pTimestampNeededChars) ) + throw ELibMCEnvInterfaceException (LIBMCENV_ERROR_INVALIDPARAM); + std::string sTimestamp(""); + IBuild* pIBuild = dynamic_cast(pIBaseClass); + if (!pIBuild) + throw ELibMCEnvInterfaceException(LIBMCENV_ERROR_INVALIDCAST); + + bool isCacheCall = (pTimestampBuffer == nullptr); + if (isCacheCall) { + sTimestamp = pIBuild->GetCreatedTimestamp(); + + pIBuild->_setCache (new ParameterCache_1 (sTimestamp)); + } + else { + auto cache = dynamic_cast*> (pIBuild->_getCache ()); + if (cache == nullptr) + throw ELibMCEnvInterfaceException(LIBMCENV_ERROR_INVALIDCAST); + cache->retrieveData (sTimestamp); + pIBuild->_setCache (nullptr); + } + + if (pTimestampNeededChars) + *pTimestampNeededChars = (LibMCEnv_uint32) (sTimestamp.size()+1); + if (pTimestampBuffer) { + if (sTimestamp.size() >= nTimestampBufferSize) + throw ELibMCEnvInterfaceException (LIBMCENV_ERROR_BUFFERTOOSMALL); + for (size_t iTimestamp = 0; iTimestamp < sTimestamp.size(); iTimestamp++) + pTimestampBuffer[iTimestamp] = sTimestamp[iTimestamp]; + pTimestampBuffer[sTimestamp.size()] = 0; + } + return LIBMCENV_SUCCESS; + } + catch (ELibMCEnvInterfaceException & Exception) { + return handleLibMCEnvException(pIBaseClass, Exception); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException); + } + catch (...) { + return handleUnhandledException(pIBaseClass); + } +} + +LibMCEnvResult libmcenv_build_getlastexecutiontimestamp(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nTimestampBufferSize, LibMCEnv_uint32* pTimestampNeededChars, char * pTimestampBuffer) +{ + IBase* pIBaseClass = (IBase *)pBuild; + + try { + if ( (!pTimestampBuffer) && !(pTimestampNeededChars) ) + throw ELibMCEnvInterfaceException (LIBMCENV_ERROR_INVALIDPARAM); + std::string sTimestamp(""); + IBuild* pIBuild = dynamic_cast(pIBaseClass); + if (!pIBuild) + throw ELibMCEnvInterfaceException(LIBMCENV_ERROR_INVALIDCAST); + + bool isCacheCall = (pTimestampBuffer == nullptr); + if (isCacheCall) { + sTimestamp = pIBuild->GetLastExecutionTimestamp(); + + pIBuild->_setCache (new ParameterCache_1 (sTimestamp)); + } + else { + auto cache = dynamic_cast*> (pIBuild->_getCache ()); + if (cache == nullptr) + throw ELibMCEnvInterfaceException(LIBMCENV_ERROR_INVALIDCAST); + cache->retrieveData (sTimestamp); + pIBuild->_setCache (nullptr); + } + + if (pTimestampNeededChars) + *pTimestampNeededChars = (LibMCEnv_uint32) (sTimestamp.size()+1); + if (pTimestampBuffer) { + if (sTimestamp.size() >= nTimestampBufferSize) + throw ELibMCEnvInterfaceException (LIBMCENV_ERROR_BUFFERTOOSMALL); + for (size_t iTimestamp = 0; iTimestamp < sTimestamp.size(); iTimestamp++) + pTimestampBuffer[iTimestamp] = sTimestamp[iTimestamp]; + pTimestampBuffer[sTimestamp.size()] = 0; + } + return LIBMCENV_SUCCESS; + } + catch (ELibMCEnvInterfaceException & Exception) { + return handleLibMCEnvException(pIBaseClass, Exception); + } + catch (std::exception & StdException) { + return handleStdException(pIBaseClass, StdException); + } + catch (...) { + return handleUnhandledException(pIBaseClass); + } +} + LibMCEnvResult libmcenv_build_getstorageuuid(LibMCEnv_Build pBuild, const LibMCEnv_uint32 nStorageUUIDBufferSize, LibMCEnv_uint32* pStorageUUIDNeededChars, char * pStorageUUIDBuffer) { IBase* pIBaseClass = (IBase *)pBuild; @@ -33871,6 +33967,10 @@ LibMCEnvResult LibMCEnv::Impl::LibMCEnv_GetProcAddress (const char * pProcName, *ppProcAddress = (void*) &libmcenv_build_getname; if (sProcName == "libmcenv_build_getbuilduuid") *ppProcAddress = (void*) &libmcenv_build_getbuilduuid; + if (sProcName == "libmcenv_build_getcreatedtimestamp") + *ppProcAddress = (void*) &libmcenv_build_getcreatedtimestamp; + if (sProcName == "libmcenv_build_getlastexecutiontimestamp") + *ppProcAddress = (void*) &libmcenv_build_getlastexecutiontimestamp; if (sProcName == "libmcenv_build_getstorageuuid") *ppProcAddress = (void*) &libmcenv_build_getstorageuuid; if (sProcName == "libmcenv_build_getstoragesha256") diff --git a/Implementation/LibMCEnv/libmcenv_build.cpp b/Implementation/LibMCEnv/libmcenv_build.cpp index d7b3dd6d..d3836a86 100644 --- a/Implementation/LibMCEnv/libmcenv_build.cpp +++ b/Implementation/LibMCEnv/libmcenv_build.cpp @@ -95,6 +95,39 @@ std::string CBuild::GetBuildUUID() return pBuildJob->GetUUID(); } +std::string CBuild::GetCreatedTimestamp() +{ + auto pBuildJobHandler = m_pDataModel->CreateBuildJobHandler(); + auto pBuildJob = pBuildJobHandler->RetrieveJob(m_sBuildJobUUID); + return pBuildJob->GetTimeStamp(); +} + +std::string CBuild::GetLastExecutionTimestamp() +{ + auto pBuildJobHandler = m_pDataModel->CreateBuildJobHandler(); + auto pBuildJob = pBuildJobHandler->RetrieveJob(m_sBuildJobUUID); + + // Find the latest execution timestamp + std::string sLatestExecutionTime = ""; + uint64_t nLatestExecutionMicroseconds = 0; + + auto pJobExecutionIterator = pBuildJob->RetrieveBuildJobExecutions(""); + while (pJobExecutionIterator->MoveNext()) { + auto pJobExecution = pJobExecutionIterator->GetCurrentJobExecution(); + uint64_t nExecutionTime = pJobExecution->GetStartTimeStampInMicroseconds(); + if (nExecutionTime > nLatestExecutionMicroseconds) { + nLatestExecutionMicroseconds = nExecutionTime; + } + } + + // Convert to ISO 8601 format if we found any executions + if (nLatestExecutionMicroseconds > 0) { + sLatestExecutionTime = AMCCommon::CChrono::convertToISO8601TimeUTC(nLatestExecutionMicroseconds); + } + + return sLatestExecutionTime; +} + std::string CBuild::GetStorageUUID() { auto pBuildJobHandler = m_pDataModel->CreateBuildJobHandler(); diff --git a/Implementation/LibMCEnv/libmcenv_build.hpp b/Implementation/LibMCEnv/libmcenv_build.hpp index de140f2f..bdae825f 100644 --- a/Implementation/LibMCEnv/libmcenv_build.hpp +++ b/Implementation/LibMCEnv/libmcenv_build.hpp @@ -77,6 +77,10 @@ class CBuild : public virtual IBuild, public virtual CBase { std::string GetBuildUUID() override; + std::string GetCreatedTimestamp() override; + + std::string GetLastExecutionTimestamp() override; + std::string GetStorageUUID() override; std::string GetStorageSHA256() override;