diff --git a/.env.example b/.env.example index 3fd805f..f084e23 100644 --- a/.env.example +++ b/.env.example @@ -23,14 +23,5 @@ QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 -MAIL_MAILER=smtp -MAIL_HOST=mailhog -MAIL_PORT=1025 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS=null -MAIL_FROM_NAME="${APP_NAME}" - WWWUSER=1000 WWWGROUP=1000 diff --git a/app/Http/Controllers/ExercicioController.php b/app/Http/Controllers/ExercicioController.php index 2a6aaa0..2e728ae 100644 --- a/app/Http/Controllers/ExercicioController.php +++ b/app/Http/Controllers/ExercicioController.php @@ -169,17 +169,41 @@ private function corretoR(Exercicio $exercicio, string $file) // resposta do R try { $cnx = new Connection('r'); + } catch (Exception $e) { + Log::error('Erro ao conectar ao serviço R'); + return [ + 'status' => 'danger', + 'mensagem' => 'Ocorreu um erro ao conectar com o serviço R. Por favor contate um administrador.', + 'resultado' => null, + 'nota' => 0 + ]; + } + try { $rcode = '' // database auth . 'dbusr <- "' . env('DB_USERNAME') . '";' . 'dbpass <- "' . env('DB_PASSWORD') . '";' . 'dbname <- "' . env('DB_DATABASE') . '";' . 'con <- connect(dbusr, dbpass, dbname);' + ; + $r = $cnx->evalString($rcode); + } catch (Exception $e) { + Log::error('Erro ao na conexão RMySql'); + return [ + 'status' => 'danger', + 'mensagem' => 'Ocorreu um erro ao acessar os testes do exercício. Por favor contate um administrador.', + 'resultado' => null, + 'nota' => 0 + ]; + } + + try { + $rcode = '' // import files . 'file.copy(list.files("/arquivos/",recursive=TRUE,full.names=TRUE),".");' // Limits memory usage - . 'rlimit_as(1e10);' + . 'rlimit_as(1e9);' . 'rlimit_cpu(15);' // run corretoR . 'res <- notaR(' . $exercicio->id . ',"' . $file . '");' diff --git a/docker/R/corretor.R b/docker/R/corretor.R index ca3926a..569c5f4 100644 --- a/docker/R/corretor.R +++ b/docker/R/corretor.R @@ -19,20 +19,12 @@ no.results <- function(object) { # texto # E devolve um um vector logico com o resultado dos testes # Caso o codigo tenha erros de sintaxe, retorna NULL -corretoR <- function (id.exerc, texto) { +corretoR <- function (precondi, testes, texto) { # Definicoes iniciais corrEnv <- new.env() # Funcoes disponiveis dentro do ambiente de correcao eval(parse(file=paste0("/usr/local/src/notar/acessorias.R")), envir=corrEnv) - testes <- dbGetQuery(con, - paste("SELECT condicao FROM testes - WHERE exercicio_id=", id.exerc, - " ORDER BY id ASC", sep="")); - precondi <- dbGetQuery(con, - paste("SELECT precondicoes FROM exercicios - WHERE id=", id.exerc, sep="")); - # Executa as precondicoes if(!no.results(precondi)) eval(parse(text=precondi), envir=corrEnv); @@ -62,11 +54,19 @@ corretoR <- function (id.exerc, texto) { # Recebe o exercicio, transforma o texto em string, corrige, e retorna o vetor de true/false para os testes passados notaR <- function (id.exerc, arquivo) { texto <- readLines(arquivo, encoding="utf8"); - nota <- corretoR (id.exerc, texto); + testes <- dbGetQuery(con, + paste("SELECT condicao FROM testes + WHERE exercicio_id=", id.exerc, + " ORDER BY id ASC", sep="")); + precondi <- dbGetQuery(con, + paste("SELECT precondicoes FROM exercicios + WHERE id=", id.exerc, sep="")); + + nota <- corretoR (precondi, testes, texto); # Tenta de novo com charset latin1: if (is.null(nota)) { texto <- readLines(arquivo, encoding="latin1"); - nota <- corretoR (id.exerc, texto); + nota <- corretoR (precondi, testes, texto); } return (nota); }