LCOV - code coverage report
Current view: top level - Servidor - ServerUtils.cpp (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 72 78 92.3 %
Date: 2016-07-11 17:43:33 Functions: 11 11 100.0 %

          Line data    Source code
       1             : #include "ServerUtils.h"
       2             : 
       3             : #define DEFAULT_LOG_CONFG "logCnfgs/default.conf"
       4             : #define DEBUG_LOG_CONFG "logCnfgs/debug.conf"
       5             : #define DEFAULT_CONFG "server.conf"
       6             : #define DEFAULT_PORT "8000"
       7             : #define DEFAULT_LOG "default"
       8             : #define DEBUG_LOG "debug"
       9             : #define DEFAULT_SHARED "http://dr-tinder.herokuapp.com"
      10             : #define CONFG_PORT_KEY "port"
      11             : #define CONFG_SHARED_KEY "shared"
      12             : #define CONFG_LOGFILE_KEY "logfile"
      13             : 
      14             : using namespace std;
      15             : 
      16           5 : void intToString(int number, std::string& result) {
      17           5 :     std::ostringstream convert;
      18           5 :     convert << number;
      19           5 :     result = convert.str();
      20           5 : }
      21             : 
      22         247 : int is_equal(const struct mg_str *s1, const std::string s2) {
      23         247 :     return mg_vcmp(s1, s2.c_str()) == 0;
      24             : }
      25             : 
      26         142 : bool equals(string s1,string s2){
      27         142 :         return s1.compare(s2) == 0;
      28             : }
      29             : 
      30         157 : bool isInteger(std::string & s)
      31             : {
      32         157 :    if(s.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) return false ;
      33             : 
      34             :    char * p ;
      35         142 :    strtol(s.c_str(), &p, 10) ;
      36             : 
      37         142 :    return (*p == 0) ;
      38             : }
      39             : 
      40         156 : bool isFloat( string myString ) {
      41         156 :     std::istringstream iss(myString);
      42             :     float f;
      43         156 :     iss >> noskipws >> f; // noskipws considers leading whitespace invalid
      44             :     // Check the entire string was consumed and if either failbit or badbit is set
      45         156 :     return iss.eof() && !iss.fail();
      46             : }
      47             : 
      48          96 : void setCnfgValue(JsonParser* parser, string key, string &value_to_set){
      49          96 :         Json::Value value;
      50          96 :         value = parser->getValue(key);
      51          96 :         if (!value.empty()) {
      52          96 :                 value_to_set = value.asString();
      53          96 :         }
      54          96 : }
      55             : 
      56          32 : void readConfigFile(string &port, string &shared, string &logCnfFile){
      57          32 :         ifstream config(DEFAULT_CONFG);
      58          32 :         if (config.is_open()){
      59          32 :                 JsonParser parser;
      60          64 :                 string line, buff="";
      61         224 :                 while ( getline (config,line) ){
      62         160 :                         buff += line;
      63             :                 }
      64          32 :                 if (parser.parsing(buff)){
      65          32 :                         setCnfgValue(&parser, CONFG_PORT_KEY,port);
      66          32 :                         setCnfgValue(&parser, CONFG_SHARED_KEY,shared);
      67          32 :                         setCnfgValue(&parser, CONFG_LOGFILE_KEY,logCnfFile);
      68             :                 }
      69          64 :                 config.close();
      70          32 :         }
      71          32 : }
      72             : 
      73         883 : void makeUsername(string &username){
      74         883 :         char * charsToRemove="@";
      75        1766 :         for (unsigned int i = 0; i < strlen(charsToRemove); ++i) {
      76             :                 username.erase(
      77             :                                 remove(username.begin(), username.end(), charsToRemove[i]),
      78         883 :                                 username.end());
      79             :         }
      80             : 
      81         883 : }
      82             : 
      83          32 : void configure(int argc, char **argv, string &port, string &shared) {
      84          64 :         string _port="", _shared="", _logCnf="", logCnfFile="";
      85             : 
      86             :         //primero lee .conf
      87          32 :         readConfigFile(_port,_shared,logCnfFile);
      88             : 
      89             :         //sobreescribe con comandos
      90          59 :         for (int i = 1; i + 1 < argc; i++) {
      91          27 :                 string flag = string(argv[i]);
      92          27 :                 if (equals(flag,"-p") || equals(flag,"--port")) {
      93           5 :                         _port = argv[i + 1];
      94          22 :                 } else if (equals(flag,"-s") || equals(flag,"--shared") ) {
      95           5 :                         _shared = argv[i + 1];
      96          17 :                 } else if (equals(flag,"-l") || equals(flag,"--log") ) {
      97           7 :                         _logCnf = argv[i + 1];
      98          10 :                 }else if (equals(flag,"-lf") || equals(flag,"--logfile")){
      99           0 :                         logCnfFile = argv[i + 1];
     100             :                 }
     101          27 :         }
     102             : 
     103             :         //set defaults
     104          32 :         if (_logCnf.empty()){
     105          25 :                 _logCnf = DEFAULT_LOG;
     106             :         }
     107             : 
     108          32 :         if ( (logCnfFile.empty()) || (_logCnf.compare(DEBUG_LOG) == 0 ) ){
     109           7 :                 if (equals(_logCnf, DEBUG_LOG)) {
     110           7 :                         logCnfFile = DEBUG_LOG_CONFG;
     111             :                 } else {
     112           0 :                         logCnfFile = DEFAULT_LOG_CONFG;
     113             :                 }
     114             :         }
     115             : 
     116             :         //set logger
     117          64 :         el::Configurations conf(logCnfFile);
     118          32 :         el::Loggers::reconfigureAllLoggers(conf);
     119          32 :         el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput);
     120             : 
     121          32 :         LOGG(INFO)<< "Logger took cnfg from: " << logCnfFile;
     122             : 
     123          32 :         if (_port.empty() || ! isInteger(_port)){
     124           0 :                 _port = DEFAULT_PORT;
     125           0 :                 LOGG(INFO) << "Port set to default";
     126             :         }else{
     127          32 :                 LOGG(INFO) << "Server port set to: " << _port;
     128             :         }
     129             : 
     130          32 :         if (_shared.empty()){
     131           0 :                 _shared = DEFAULT_SHARED;
     132           0 :                 LOGG(INFO) << "Shared server set to defualt";
     133             :         }else{
     134          32 :                 LOGG(INFO) << "Shared server link to: " << _shared;
     135             :         }
     136             : 
     137          32 :         port = _port;
     138          64 :         shared = _shared;
     139             : 
     140          98 : }

Generated by: LCOV version 1.12-4-g04a3c0e