Config.php.template 7.12 KiB
<?php
namespace SmartData\Config
{
// CAUTION: Pay attention to changing these parameters
require_once( __DIR__ . '/SmartData.php');
use \SmartData\SmartData;
class Config_Common
{
const SMARTDATACONTEXT_API = 'http://smartdata-context-api';
const MYSQL_SEVERNAME = 'db';
const MYSQL_PORT = 3306;
const MYSQL_USERNAME = 'smartdata';
const MYSQL_PASSWORD = 'smartdata';
const MYSQL_SUPERUSER = 'root';
const MYSQL_SUPERPASS = 'ch4ng3m3';
const CASSANDRA_SERVERNAME = 'cassandra';
const CASSANDRA_PORT = 9042;
const CASSANDRA_SUPERUSER = 'cassandra';
const CASSANDRA_SUPERPASS = 'ch4ng3m3';
const CASSANDRA_MAX_ROW_SIZE = 2000000000; // (Two billion - The max is 2^31)
const POINTS_LIMIT = 2000; // 84600 to 200000
// maximum amount of points to retrieval
// 86400 corresponds to a half day with resolution of one second
const ADMIN_EMAIL = array('root@lisha.ufsc.br');
const PUBLIC_DOMAIN = 'public'; // default domain (public series)
const DEFAULT_USERNAME = 'public'; // cassandra default user (PUBLIC)
const DEFAULT_PASSWORD = ''; // cassandra default user's password
const TIMEZONE = 'America/Sao_Paulo';
const HYSTERICALLY_DEBUGGED = false;
const DEBUGGED = array(
'SmartData\Backend' => self::HYSTERICALLY_DEBUGGED || false,
'SmartData\Credentials' => self::HYSTERICALLY_DEBUGGED || false,
'SmartData\SmartData' => self::HYSTERICALLY_DEBUGGED || false,
'SmartData\Series' => self::HYSTERICALLY_DEBUGGED || false,
'SmartData\Unpackable' => self::HYSTERICALLY_DEBUGGED || false,
'SmartData\Logger' => false,
);
const LOG_FILE = '/smartdata/log/api.log';
const BUFFERED_LOG = true;
const TEMP_DIR = "/smartdata/bin/tmp";
const FATAL_ERROR_REPORT = true;
const FATAL_ERROR_DIR = __DIR__.'/fatal_error/';
const ACCESSIBLE_WITHOUT_SSL = array(
self::PUBLIC_DOMAIN
,'hydro'
,'tutorial'
);
/*---------------------------------------------------------------------------------------------------------------+
| V.1.0: This was the first version after we atopped using KairosDB as a platform |
| V.1.1: This version has the same API of version 1.0, however the structure and |
| the DataBase design are totally different. The dev number works fine in this version |
+---------------------------------------------------------------------------------------------------------------*/
public const VERSION_1_0 = (1 << 4) | (0 << 0);
public const VERSION_1_1 = (1 << 4) | (1 << 0);
public const DEFAULT_VERSION = self::VERSION_1_1;
public const DEVELOPMENT = PHP_INT_MAX;
private const _VERSIONS = array (
self::VERSION_1_0 => '/api/v1_0/',
self::VERSION_1_1 => '/api/v1_1/'
);
private const _CERT_GW_LISHA = 'A7B64D415BD3E97B';
public static function api_version() {
global $__FORCE_VERSION;
if(isset($__FORCE_VERSION))
return $__FORCE_VERSION;
//switch (REQUEST_CERT) {
// case self::_CERT_GW_LISHA:
// return self::VERSION_1_1;
// default: break;
//}
foreach (self::_VERSIONS as $version => $url_pattern) {
if(self::check_version($url_pattern))
return $version;
}
return self::DEFAULT_VERSION; //default version
}
private static function check_version(string $version) {
global $FORCE_VERSION;
return (strpos($_SERVER['REQUEST_URI']??$FORCE_VERSION??'', $version) !== false);
}
public static function pre_init() {
define('REQUEST_HTTPS' , (($_SERVER['HTTPS'] ?? false) == 'on'));
define('REQUEST_CERT' , (REQUEST_HTTPS and ($_SERVER['SSL_CLIENT_VERIFY'] ?? false) == 'SUCCESS'));
define('REQUEST_SERIAL', (REQUEST_CERT) ? @$_SERVER['SSL_CLIENT_M_SERIAL'] : '');
define('REQUEST_URI' , isset($_SERVER["REQUEST_URI"])?strtok(basename($_SERVER["REQUEST_URI"]),'?'):'{local}');
define('REQUEST_DBG' , ('HTTP'.((REQUEST_HTTPS)?'S':'').':'.REQUEST_URI.' crt:{'.REQUEST_SERIAL.'}'));
}
public static function init() {
date_default_timezone_set(Config_Common::TIMEZONE);
}
}
Config_Common::pre_init();
## Configuration of API version 1.0 ###############################################
class Config_V1_0 extends Config_Common
{
//const HYSTERICALLY_DEBUGGED = true;
const MYSQL_DBNAME = 'smartdata';
const CASSANDRA_KEYSPACE = 'smartdata_1';
const CONFIDENCE_ASSIGNER = __DIR__ . '/confidence_assigner/assigner0';
protected const _MYSQL_TABLE = array (
SmartData::STATIC_VERSION => 'series',
SmartData::MOBILE_VERSION => 'series'
);
}
## Configuration of API version 1.1 ###############################################
class Config_V1_1 extends Config_Common
{
const HYSTERICALLY_DEBUGGED = true;
const MYSQL_DBNAME = 'smartdata_v1';
const CASSANDRA_KEYSPACE = 'smartdata_v1';
protected const _MYSQL_TABLE = array (
SmartData::STATIC_VERSION => 'series',
SmartData::MOBILE_VERSION => 'trackers'
);
}
###################################################################################
switch (Config_Common::api_version()) {
case Config_Common::VERSION_1_0: class MetaConfig extends Config_V1_0 {} break;
case Config_Common::VERSION_1_1: class MetaConfig extends Config_V1_1 {} break;
default:
die ("Bad API version!\n");
}
trait ConfigGetters
{
public function MySQL_Table($version) : string {
if(isset(self::_MYSQL_TABLE[$version]))
return self::MYSQL_DBNAME.'.'.self::_MYSQL_TABLE[$version];
else
die ("Unable to select mysql table\n");
}
}
Config_Common::init();
}
namespace SmartData
{
class Config_Common extends Config\Config_Common {};
class Config {
public static function config(){
switch (Config_Common::api_version()) {
case Config_Common::VERSION_1_0:
return new class() extends Config\Config_V1_0 {
use Config\ConfigGetters;
};
break;
case Config_Common::VERSION_1_1:
return new class() extends Config\Config_V1_1 {
use Config\ConfigGetters;
};
break;
default:
die ("Bad API version!\n");
}
}
};
}