gcontini
2020-03-15 ef7df8048d1067d3148287f27af9047743f1e2ae
src/library/os/execution_environment_common.cpp
New file
@@ -0,0 +1,59 @@
/*
 *
 *  Created on: Feb 23, 2020
 *      Author: GC
 */
#include <stdio.h>
#include <string.h>
#include <unordered_map>
#include <array>
#include "../base/base.h"
#include "cpu_info.hpp"
#include "execution_environment.hpp"
namespace license {
namespace os {
using namespace std;
VIRTUALIZATION ExecutionEnvironment::getVirtualization() const {
   VIRTUALIZATION result;
   CpuInfo cpuInfo;
   bool isContainer = is_container();
   if (isContainer) {
      result = CONTAINER;
   } else if (cpuInfo.cpu_virtual() || is_cloud()) {
      result = VM;
   } else {
      result = NONE;
   }
   return result;
}
bool ExecutionEnvironment::is_cloud() const {
   CLOUD_PROVIDER prov = getCloudProvider();
   return prov != ON_PREMISE && prov != PROV_UNKNOWN;
}
// TODO test and azure
CLOUD_PROVIDER ExecutionEnvironment::getCloudProvider() const {
   CLOUD_PROVIDER result = PROV_UNKNOWN;
   if (m_bios_description.size() > 0 || m_bios_vendor.size() > 0 || m_sys_vendor.size() > 0) {
      if (m_bios_vendor.find("SEABIOS") != string::npos || m_bios_description.find("ALIBABA") != string::npos ||
         m_sys_vendor.find("ALIBABA") != string::npos) {
         result = ALI_CLOUD;
      } else if (m_sys_vendor.find("GOOGLE") != string::npos || m_bios_description.find("GOOGLE") != string::npos) {
         result = GOOGLE_CLOUD;
      } else if (m_bios_vendor.find("AWS") != string::npos || m_bios_description.find("AMAZON") != string::npos ||
               m_sys_vendor.find("AWS") != string::npos) {
         result = AWS;
      } else if (m_bios_description.find("HP-COMPAQ") != string::npos || m_bios_description.find("ASUS") ||
               m_bios_description.find("DELL")) {
         result = ON_PREMISE;
      }
   }
   return result;
}
}  // namespace os
}  // namespace license