LogicalSector * getSectorFromCacheOrDisk1 (tSectorId sid) { char logBuf[BUFFSIZE]; LogicalSector *ls; tSearchParm search; uint headPos; int ret = 0; ls = sector_BuildLogical(sid, NULL); /* Reserva memoria - usaba SECTOR_BLANK */ if (isVdaAvailableCache()) if ((ret = cache_Search (getVdaCache(), ls, sid)) == 1) if(isInfoEnabled()) { sprintf_s(logBuf, BUFFSIZE,"[GET] Tiempo consumido: %.2f, Sectores leidos: %d (en cache), Cache Hit/Miss %d/%d", cache_getAccessTime(), sid, cache_getHitAverage(getVdaCache()), cache_getMissAverage(getVdaCache())); info(logBuf); } if (ret != 1) { vdadisk_read (getDBFullPath(), ls, sid); /* Lo agrego a la cache para que este en la proxima lectura */ if (isVdaAvailableCache()) cache_Write (getVdaCache(), ls); headPos = disk_getHeadPos(getDiskParms()); /* Realizo la simulacion */ scanSector(getDiskParms(), &search, sid); if(isInfoEnabled()) { if (isVdaAvailableCache()) sprintf_s(logBuf, BUFFSIZE,"[GET] Posicion cabezal: %d, Tiempo consumido: %.2f, Sectores leidos: %s, Cache Hit/Miss %d/%d", headPos, search_getTime(&search), search_getHistory(&search), cache_getHitAverage(getVdaCache()), cache_getMissAverage(getVdaCache())); else sprintf_s(logBuf, BUFFSIZE,"[GET] Posicion cabezal: %d, Tiempo consumido: %.2f, Sectores leidos: %s", headPos, search_getTime(&search), search_getHistory(&search)); info(logBuf); } } searchParmDestroy (&search); return ls; }
int main(void) { configure(); //testFormat(); //testCreate(); //testCreatingBitVector(); //testUpdateSize(); //testGettingFileInformation(); //testAddingSectors(); //testListingFiles(); //testFreeingSectors(); //testGetCurrentSize(); //testListImplementation(); //testListImplementation2(); if(isInfoEnabled()) info("Conectando con modulo KSS"); ListenSocket s = openClientConnection(getKssHost() , getKssPort()); if(s == INVALID_SOCKET){ error("no se puede abrir la coneccion"); return EXIT_FAILURE; } if(isInfoEnabled()) info("Quedando a la espera de peticiones para realizar operaciones FSS"); RuntimeErrorValidator * validator ; MpsRequest * request = NULL; while(isFssRunningStatus()){ validator = buildErrorSuccessValidator(); request = receiveMpsRequest(s , validator); validator = buildErrorSuccessValidator(); info("Reciviendo peticion MPS"); if(isInfoEnabled()) info(concatAll(3 , "Header.DescriptorId: '" , strndup(request->descriptorId , 16) , "'")); if(isInfoEnabled()) info( concatAll(3 , "Payload.Arguments: '" , formatListToPreetyString(request->arguments) , "'")); if(isInfoEnabled()) info(concatAll(3 , "Payload.OperationName: '" , request->operationName , "'")); executeOperation(s , request , validator); } return EXIT_SUCCESS; }
void setupDirectoryIndexes(){ if(existsFile(getDataDirectory())){ if(isInfoEnabled()) info(concatAll( 3, "Usando " , getDataDirectory() , " como directorio de indices")); }else{ if(isInfoEnabled()) info(concatAll(2 , "No existe el directorio " , getDataDirectory())); if(createDirectory(getDataDirectory())){ if(isInfoEnabled()) info(concatAll(2 , "Se crea " , getDataDirectory())); }else{ if(isInfoEnabled()) info(concatAll(2 , "No se pudo crear el directorio " , getDataDirectory())); killAndWait(1); return; } } }
int main(void){ configure(); showInfo(); if (!isVdaOfflineMode()){ if( isInfoEnabled()) info( "Lanzando proceso servicio de comunicacion con KSS" ); if(isKssConnectionOpen()) launchKssServiceThread(); } info( "Lanzando proceso Shell" ); help(); Sleep(1000); do{ processShell(); }while(isVdaRunningStatus()); finalizeResources(); Sleep(1000); //testRandomKeys(); return EXIT_SUCCESS; }
void configure(RuntimeErrorValidator * v){ setupConfiguration(v); closingEvents(); if(hasError(v)){ return; } //setLoggingLevelEnabled(LOGGING_LEVEL_INFO); setFssRunningStatus(TRUE); setupDirectoryIndexes(); if(isInfoEnabled()) info("Conectando con modulo KSS"); ListenSocket s = openClientConnection(getKssHost() , getKssPort()); if(s == INVALID_SOCKET){ setError(v , "no se puede abrir la coneccion"); return; } MpsHandshake * handshake = buildMpsHandhake(generateRandomKey(16) , FSS_HANDSHAKE); handshake = sendAndReceiveMpsHandshake(handshake , s , v); if(handshake != NULL && handshake->statusCode == MPS_RESPONSE_STATUS_CODE_SUCCESS ){ info(concatAll(2 , "Handshake realizado satisfactoriamente con DescriptorId: " , handshake->descriptorId)); setFileSystemSocket(s); }else{ setError(v , "Hubo un problema y no se pudo realizar el handshake"); return; } }
void launch(){ RuntimeErrorValidator * validator = NULL; if(isInfoEnabled()) info("Quedando a la espera de peticiones para realizar operaciones FSS"); MpsMessage * request = NULL; while(isFssRunningStatus()){ validator = buildErrorSuccessValidator(); request = receiveMpsMessage(getFileSystemSocket(), validator); if(request == NULL || hasError(validator)){ error("Se produjo un error en la recepcion, finalizando la aplicacion"); close(getFileSystemSocket()); exit(1); } if(isDebugEnabled()) debug("Reciviendo peticion MPS"); if(isDebugEnabled()) debug(concatAll(3 , "Header.DescriptorId: '" , strndup(request->descriptorId , 16) , "'")); if(isDebugEnabled()) debug( concatAll(3 , "Payload.Arguments: '" , formatListToPreetyString(request->commands) , "'")); if(isDebugEnabled()) debug(concatAll(3 , "Payload.OperationName: '" , request->operationName , "'")); executeOperation(getFileSystemSocket() , request , validator); } }
void * runShellServiceThread(void * arg){ if(isInfoEnabled()){ info("Quedando a la espera de conecciones Shell"); } ServerSocket * serverSocket = openServerConnection(getShellPort()); setShellServerSocket(serverSocket); ListenSocket listenSocket; ClientConnection * clientConnection; Thread thread; RuntimeErrorValidator * validator = NULL; do{ listenSocket = acceptConnection(serverSocket); validator = buildErrorSuccessValidator(); doHandshake(listenSocket , SHELL_HANDSHAKE , validator); if(!hasError(validator)){ clientConnection = buildClientConnection(listenSocket); pthread_create(&thread , NULL , runServiceShellThread , clientConnection); clientConnection->servingThread = thread; }else{ error("No se pudo lograr el handhsake entre el kss y el proceso remoto Shell"); } }while(isKssRunningStatus()); close(getShellServerSocket()); return EXIT_SUCCESS; }
void * runShellServiceThread(void * arg){ if(isInfoEnabled()){ info("Quedando a la espera de conecciones Shell"); } ServerSocket * serverSocket = openServerConnection(getShellPort()); ListenSocket listenSocket; ClientConnection * clientConnection; setShellServerConnection(serverSocket); Thread thread; do{ listenSocket = acceptConnection(serverSocket); clientConnection = buildClientConnection(listenSocket); pthread_create(&thread , NULL , runServiceShellThread , clientConnection); clientConnection->servingThread = thread; //TODO: agregar a la lista de recursos este ClientConnection //TODO: representando a uno de los clinetes shell conectados }while(isKssRunningStatus()); closeShellServerConnection(); return EXIT_SUCCESS; }
void Logger::info(std::string message) { if (!isInfoEnabled()) { return; } appendAll("INFO", message); }
void * runFtpServiceThread(void * arg){ ServerSocket * serverSocket = openServerConnection(getFtpsPort()); setFtpServerSocket(serverSocket); ListenSocket listenSocket; ClientConnection * clientConnection; RuntimeErrorValidator * validator = buildErrorSuccessValidator(); Thread thread; do{ if(isKssOperationalStatus()){ if(isInfoEnabled()){ info("Quedando a la espera de conecciones FTP"); } listenSocket = acceptConnection(serverSocket); doHandshake(listenSocket , FTP_HANDSHAKE , validator); if(hasError(validator)){ error("No se pudo lograr el handhsake entre el kss y el proceso remoto FTPS."); } else { clientConnection = malloc(sizeof(ClientConnection)); clientConnection->clientSocket = listenSocket; pthread_create(&thread , NULL , runServiceFtpsThread , clientConnection); clientConnection->servingThread = thread; } }else{ if(isInfoEnabled()){ info("Aguardando por estado operacional"); } sleep(5); } }while(isKssRunningStatus()); close(getFtpServerSocket()); return EXIT_SUCCESS; }
/*! Returns \c true if a message of type \a msgtype for the category should be shown. Returns \c false otherwise. */ bool QLoggingCategory::isEnabled(QtMsgType msgtype) const { switch (msgtype) { case QtDebugMsg: return isDebugEnabled(); case QtInfoMsg: return isInfoEnabled(); case QtWarningMsg: return isWarningEnabled(); case QtCriticalMsg: return isCriticalEnabled(); case QtFatalMsg: return true; } return false; }
void setupConfiguration(){ if(isInfoEnabled()){ info( "Inicializando la configuracion."); info(concat(getGlobalHeap() , 2 , "Levantando la configurarcion del archivo " , FTPS_CONFIGURATION_FILE)); } loadConfigurationW( FTPS_CONFIGURATION_FILE , getGlobalHeap() , &processConfiguration); }
void initializeKssConnection(){ ListenSocket kssConnectionSocket; if( isInfoEnabled()) info( "Iniciando la conexion con el KSS"); kssConnectionSocket = openConnectionSocket( getKssAddress() , getKssPort()); setKssConnection( kssConnectionSocket ); if( isInfoEnabled()) if( isKssConnectionOpen() ){ RuntimeErrorValidator * validator; List arguments ; MpsRequest * request ; MpsResponse * response ; info( concat(getGlobalHeap() , 4, "Proceso VDA conectado con proceso remoto Kss en host " , getKssAddress() , ":" , getKssPort())); validator = buildErrorSuccessValidator(getGlobalHeap()); arguments = buildStringsListWithValues(getGlobalHeap() , 1, getVdaName()); request = buildMpsRequest(generateRandomKey(16 , getGlobalHeap()) , VDA_IDENTIFY_NAME , arguments , getGlobalHeap()); response = sendAndReceiveMpsMessages(kssConnectionSocket , request , validator, getGlobalHeap()); if(equalsStrings(response->statusCode , MPS_RESPONSE_STATUS_CODE_SUCCESS)){ info(concat(getGlobalHeap() , 2 , "Proceso VDA identificado con el Kss satisfactoriamente bajo el nombre: " , getVdaName())); }else{ error("El proceso no se pudo identificar con el Kss por lo que el Kss no lo reconoce como dispositivo"); } }else { info( "Proceso VDA trabajando en modo offline. Fallo la conexion con servicio KSS"); } }
void setupConfiguration(){ if(isInfoEnabled()){ info( "Inicializando la configuracion"); info(concat(getGlobalHeap() , 2 , "Levantando la configurarcion del archivo " , VDA_CONFIGURATION_FILE_NAME)); } /** * TODO: modificar la funcion para pasar el archivo * directamente, de esta forma se puede validar si existe o no. */ loadConfiguration( VDA_CONFIGURATION_FILE_NAME , getGlobalHeap() , &processConfiguration); }
void showInfo(void) { char logBuf[BUFFSIZE]; if (isInfoEnabled()) { sprintf_s(logBuf, BUFFSIZE, "[SHOW] Tiempo medio de busqueda: %.2f ", disk_averageTime(getDiskParms())); info(logBuf); sprintf_s(logBuf, BUFFSIZE, "[SHOW] Tiempo peor de busqueda: %.2f ", disk_worstTime(getDiskParms())); info(logBuf); info(concat(getGlobalHeap(), 2,"[SHOW] Tasa de transferencia: ", itoa_buf(disk_transferRate(getDiskParms())))); if (isVdaAvailableCache()) { sprintf_s(logBuf, BUFFSIZE, "[SHOW] Tiempo medio de acceso a la cache: %.2f", cache_getAccessTime()); info(logBuf); } else info("[SHOW] Cache desactivada"); sprintf_s(logBuf, BUFFSIZE, "[SHOW] Rango valido de sectores [0..%d]", disk_lastSectorId(getDiskParms())); info(logBuf); } }
int putSectorOnDisk (LogicalSector * ls) { char logBuf[BUFFSIZE]; tSearchParm search; uint headPos; int ret = 0; vdadisk_write (getDBFullPath(), ls); headPos = disk_getHeadPos(getDiskParms()); /* Actualizo la cache si el sector esta en ella, sino hay bolonki despues al leer */ if (cache_Search (getVdaCache(), NULL, ls->sectorId) == 1) cache_Write (getVdaCache(), ls); /* Realizo la simulacion */ scanSector(getDiskParms(), &search, ls->sectorId); if(isInfoEnabled()) { sprintf_s(logBuf, BUFFSIZE,"[PUT] Posicion cabezal: %d, Tiempo consumido: %.2f, Sectores leidos: %s", headPos, search_getTime(&search), search_getHistory(&search)); info(logBuf); } searchParmDestroy (&search); return SECTOR_SIZE; }
void * runFssServiceThread(void * arg) { if(isInfoEnabled()){ info("Quedando a la espera de conecciones FSS"); } RuntimeErrorValidator * validator = buildErrorSuccessValidator(); ServerSocket * serverSocket = openServerConnection(getFssListenPort()); setFssServerSocket(serverSocket); ListenSocket clientSocket = acceptConnection(serverSocket); doHandshake(clientSocket , FSS_HANDSHAKE, validator); if(hasError(validator)){ error(validator->errorDescription); return NULL; } setFileSystemConnection(clientSocket ); close(serverSocket); return EXIT_SUCCESS; }
void initializeDisk() { /* Inicializo la estructura contenedora de parametros del disco usada en calculos y simulacion. */ /* Uso getters de vda-configuration.h, info que viene directamente del archivo de configuracion. */ if( isInfoEnabled()) info( "Iniciando parametros del disco"); diskParmInit (getDiskParms(), getVdaTrackCount(), getVdaSectorCount(), getiRpm(), getTrackDelay()); }
void initializeCache(){ if(isInfoEnabled()) info( "Iniciando la cache" ); setVdaCache(); }
void finalizeResources(){ if( isInfoEnabled()) info( "Liberando recursos" ); destroyHeap(getGlobalHeap()); finalizeWinsock(); }