curriculo_cursoInstruções para iniciar um novo período de entrada de dados no Sistema de Avaliação de Professores.
Primeiro execute na máquina de testes. Se estiver tudo certo, repita o processo na produção.
PASSO A PASSO:
dados_avaliacao.lua
vi /home/aipin/scripts/dados_avaliacao.lua -- alterar datas na tabela datas_professores
scp).
cvs commit /home/aipin/scripts/dados_avaliacao.lua scp -p /home/aipin/scripts/dados_avaliacao.lua prod:
prod, confira se o arquivo copiado tem as modificações que você realizou. Execute o seguinte comando.
diff ~/dados_avaliacao.lua ../aipin/scripts/dados_avaliacao.lua
mv ~/dados_avaliacao.lua ../aipin/scripts/
chmod 775 /home/aipin/scripts/dados_avaliacao.lua
mkdir /home/aipin/import/<ANO><SEMESTRE>
ead_turma.csv e ead_inscr.csv:
ead_turma.csvead_inscr.csvead_unico.csv:
ead_unico.csvvi /home/aipin/import/perguntas.lua
# Uma boa prática é redirecionar o resultado para um arquivo de log. Exemplo:
cd /home/aipin/import ./importador.lua 20111 > log20111
> ERRO DE SQL:
[!!! ALUNO SEM CURSO !!!
ERRO: valor nulo na coluna "id_curso" viola a restrição não-nula
SQL = { insert into aluno (matricula,nome,id_curso) values ('0911234','NOME DO ALUNO',(select id_curso from curso where sigla = '')) }]
58 23 * * * /home/aipin/shell/gera_estatisticas.lua professores > /var/log/ccpa/aipin_gera_estatisticas.log 2>&1
Instruções para iniciar um novo período de consulta de dados no Sistema de Avaliação de Professores.
Primeiro é aconselhável fazer um dump dos dados do esquema de entrada da máquina de produção e levá-los para a máquina de testes:
prod=> pg_dump -n entrada -c -f /home/aipin/import/[PERIODO]/entrada[PERIODO].sql -U postgres prod
# [PERIODO] deve ser substituído pelo período letivo da avaliação
alfa=> scp prod:/home/aipin/import/[PERIODO]/entrada[PERIODO].sql .
alfa=> psql prod -U postgres -f entrada[PERIODO].sql
Após deixar os bancos iguais nas duas máquinas:
alfa=> cd /home/aipin/import/ alfa=> ./acrescenta_periodo.lua
prod=> cd /home/aipin/import/ prod=> ./acrescenta_periodo.lua
Na Avaliação de Professores, um usuário professor comum pode ver apenas seus próprios comentários. Porém, existem alguns professores que possuem direito de consulta aos comentários de toda a PUC. Há também professores não tão poderosos, mas que podem ver, além de seus próprios comentários, os comentários do seu departamento. Ambos os tipos são considerados superusuários.
Essa seção explica como realizar, a partir de um arquivo .csv, a atualização dos poderes dos professores, isto é, a atualização da tabela permissao do banco de dados.
PASSO A PASSO:
| COLUNA1 | NOME | |
| ... | ...@... | ... |
Após estar com o arquivo csv pronto:
@prod:/home/aipin/import> ./atualiza_permissoes.lua -f path_arquivo.csv --nivel [total|departamento] [SIGLA]
--nivel Nível de permissão:
@prod:/home/aipin/import>./atualiza_permissoes.lua -f 20102/ver_tudo.csv --nivel total
@prod:/home/aipin/import>./atualiza_permissoes.lua -f 20102/ver_dpto.csv --nivel departamento LET
-> Uma boa prática é redirecionar o resultado para um arquivo de log.
Exemplo: ./atualiza_permissoes.lua -f 20102/ver_dpto.csv --nivel departamento LET> log_ver_dpto.
O nome está em nosso banco mas possui um formato diferente (exemplo: nomes abreviados).
Solução: Procure o nome equivalente no banco e substitua o nome presente no CSV por ele. Execute o script atualiza_permissoes.csv novamente e verifique se o nome ainda é tido como "NÃO ENCONTRADO".
O nome não existe em nosso banco de dados.
Solução: Descubra os dados do professor e insira-o no banco no período atual. Feito isso, execute o script atualiza_permissoes.csv novamente e verifique se ele ainda é tido como "NÃO ENCONTRADO".
O serviço de login automático é usado pelo sistema de matrícula para induzir os alunos que terminarem de se matricular a fazerem a avaliação dos professores do semestre anterior. A pedido da equipe do SAU, este serviço só aceita requisições de um certo conjunto de máquinas autorizadas.
O serviço fica em aipin/scripts/servicos_soap.lua e deve receber como parâmetro uma matrícula de aluno que esteve inscrito em alguma disciplina no semestre anterior. Ele irá tentar obter a página que o aluno verá quando entrar no sistema e verificar se ela está de acordo com o esperado.
O script aipin/shell/teste_servico_soap.lua pode ser usado para testá-lo. Por causa do bloqueio de IPs, o script só consegue obter os dados se for executado do alfa (139.82.196.20).
Para rodá-lo, basta tentar:
/home/aipin/shell/teste_servico_soap.lua MATRICULA
A correção na pauta pode acontecer por motivos diversos, mas é necessário haver uma confirmação do departamento/coordenação responsável pela disciplina-turma sobre a correção a ser efetuada.
Nos casos a seguir:select
pf.nome||' ('||pf.matr_professor||')' as professor,
d.sigla, t.codigo, t.id_turma, p.ch
from
entrada.professor pf inner join
entrada.pauta p using(id_professor) inner join
entrada.turma t using(id_turma) inner join
entrada.disciplina d using(id_disciplina)
where
d.sigla='DDDDDDD'
order by codigo;
select
count(distinct id_aluno)
from
entrada.turma t inner join
entrada.disciplina d using(id_disciplina) left outer join
entrada.nota_prof n using(id_turma) left outer join
entrada.comenta_prof c using(id_turma, id_aluno)
where
d.sigla='DDDDDDD'
and
t.codigo='TTT';
professor);pauta)nota_prof e comenta_prof)nota_prof e comenta_prof)pauta)begin;
update entrada.pauta
set id_professor=
(select id_professor from entrada.professor where matr_professor=XXXXX)
where
id_professor=(select id_professor from entrada.professor where matr_professor=YYYYY)
and
id_turma=(select id_turma from entrada.turma t inner join entrada.disciplina d using(id_disciplina) where t.codigo='TTT' and d.sigla='DDDDDDD');
Durante a Avaliação de Professores, são enviados dois tipos de e-mails em duas datas distintas:
Para enviar esses e-mails, os seguintes procedimentos precisam ser realizados:
select a.matricula from entrada.aluno a where not exists (select codigo from entrada.codigo_matricula where matricula=a.matricula);
Este comando deve retornar zero como resultado! Isso indica que todos os códigos já foram criados para as matrículas.
insert into entrada.codigo_matricula (matricula, codigo, timeout)
select a.matricula, md5(a.matricula || random()), 'data_final' from entrada.aluno a
where not exists (select codigo from entrada.codigo_matricula cm where cm.matricula=a.matricula);
Após executar os passos acima, envie os e-mails:
@prod:/home/aipin/shell> ./envia_spam.lua [OPTIONS]
Para conhecer as opções execute primenramente ./envia_spam.lua -h
Instruções para a geração dos relatórios dos departamentos. Esse procedimento é realizado após a liberação da consulta dos dados da avaliação dos professores.
@prod:/home/aipin/shell> ./relatorio.lua -p PERIODO_LETIVO -r TIPO_RELATORIO
PERIDO_LETIVO é o valor referente ao período letivo. Ex: 20082, 20091
TIPO_RELATORIO pode ser:
Este procedimento deve ser executado quando for necessário gerar o relatório da avaliação de um professor (notas e comentários) em um ou vários períodos letivos. Pode-se especificar também um conjunto de professores de um departamento.
@prod:/home/aipin/shell> ./relatorio_prof.lua < MATRÍCULA_PROF | SIGLA_DPTO > [OPÇÕES]* [PERIODOS]*
Os períodos letivos a serem consultados podem ser especificados com um intervalo (início e fim) ou com os períodos explícitos nos parâmetros.
TODOS (gerar de todos os professores)-c (incluir os comentários)--inicio 20151--fim 20172--quadro PRINCIPAL (só do quadro principal)--modelo_nome_arquivo relats/%s%s (ignorando o '+' e indicando o diretório onde devem ficar os arquivos)--matricula_prof (usar o número de matrícula como identificação ao invés do nome, para padronizar os nomes dos arquivos)--omitir_sigla_dpto (não incluir a sigla do departamento no nome do arquivo, para padronizar os nomes dos arquivos)
Instruções para a geração dos relatórios entregues semestralmente. Esse procedimento é realizado após a abertura da consulta dos dados da avaliação dos professores.
@prod:/home/aipin/shell> ./entrega_semestral.sh PERIODO_LETIVO
PERIDO_LETIVO é o valor referente ao período letivo. Ex: 20082, 20091
SELECT id_grupo AS g, id_nivel AS n, id_pergunta AS p, valor_chave, notas, media, desviop, total, exibir FROM nota WHERE periodo_letivo = 20062 and valor_chave = 23584 ORDER BY g,n,p;
SELECT
d.titulo, d.sigla, t.codigo, count(id_professor)
FROM
disciplina d INNER JOIN
turma t USING (periodo_letivo, id_disciplina) INNER JOIN
pauta pa USING (periodo_letivo, id_turma)
WHERE
periodo_letivo = 20161
GROUP BY d.titulo, d.sigla, t.codigo
HAVING count(id_professor) > 1;
SELECT * FROM professor pr WHERE NOT EXISTS (SELECT * FROM pauta pa WHERE pr.id_professor = pa.id_professor AND pr.periodo_letivo = pa.periodo_letivo) ORDER BY periodo_letivo;
SELECT d.sigla, t.codigo,
pr.nome||' ('||pr.matr_professor||')' as professor
FROM
disciplina d inner join
turma t using(id_disciplina) inner join
pauta pa using (id_turma) inner join
professor pr using(id_professor)
WHERE
d.sigla in ('XXXDDDD');
UPDATE professor SET id_departamento = NULL WHERE NOT EXISTS (SELECT * FROM pauta pa WHERE professor.id_professor = pa.id_professor AND professor.periodo_letivo = pa.periodo_letivo);
Na época da Avaliação Interna, a Carla Leitão costuma solicitar relatórios com médias da Avaliação de Professores.
Esses relatórios podem ser gerados através do script /home/aipin/shell/relatorio_ai.lua.
Esse script gera diferentes tipos de relatórios. Os relatórios referentes a Avaliação de Professores são os de tipo 4.
Os comandos abaixo deverão ser executados. Caso seja necessário alterar os períodos de consulta, modifique-os na tabela relatorios[4].
prod:~> cd /home/aipin/shell prod:/home/aipin/shell> ./relatorio_ai.lua 4
Os relatórios serão gerados em /tmp/relat_ai/:
prod:/home/aipin/shell> ls /tmp/relat_ai/
# AV_PROFESSORES-planilha1.csv AV_PROFESSORES-planilha2.csv AV_PROFESSORES-planilha3.csv
Após o término da Avaliação Interna, a Carla Leitão costuma solicitar relatórios com o resultado.
Estes relatórios possuem 4 formatos padrões e podem ser gerados com o script abaixo.
prod:~> cd /home/aipin/shell prod:/home/aipin/shell> ./relatorio_ai.lua -t 1 prod:/home/aipin/shell> ./relatorio_ai.lua -t 2 prod:/home/aipin/shell> ./relatorio_ai.lua -t 3 prod:/home/aipin/shell> ./relatorio_ai.lua -t 4
Os relatórios serão gerados em /tmp/relat_ai/ ou na pasta especificada através parâmetro -d.
Como ela tem solicitado também um agrupamento desses dados por centro, o script aipin/shell/entrega_interna.sh pode ser usado para gerar um .ZIP com todo esse conteúdo, ou seja, todos os tipos de relatórios considerando a PUC inteira e mais os 3 primeiros tipos agrupados por centro. Deve ser fornecido o ano da avaliação.
O script gera um único .ZIP na pasta /tmp/avaliacao_interna_$ANO, que contém uma pasta para cada tipo de relatório (dominios, medias, comentarios e professores) e mais uma pasta para cada centro
Na época da Avaliação Interna, é preciso atualizar as estatísticas de respostas enviadas diariamente. Esta atualização é feita rodando o script "gera_estatisticas.lua interna" em /home/aipin/shell. Para este script executar diariamente, precisamos alterar o crontab do usuário ccpa-auto.
Para isso, execute os seguintes comandos:
prod:~> sudo su ccpa-auto # login como ccpa-auto prod:~> crontab -e # abrirá o crontab a ser editado
No editor do crontab, deverá ser descomentada a seguinte linha:
#58 23 * * * /home/aipin/shell/gera_estatisticas.lua interna > /var/log/ccpa/aipin_gera_estatisticas.log 2>&1
Para descomentá-la basta tirar o # do início.
Uma vez editado o arquivo, basta salvá-lo para o script passar a executar diariamente.
Instruções para iniciar uma nova avaliação eventual, ou seja, uma avaliação que não necessariamente ocorrerá novamente.
Para uma nova avaliação, usamos o mesmo esquema da avaliação interna. Portanto, é preciso fazer um backup dos dados de entrada utilizados na avaliação interna, limpar o banco e então preenchê-lo com os novos dados. Use um dos dois comandos abaixo:
@zeta:$ pg_dump -n interna -c -f /home/aipin/import/interna/[ANO]/interna[ANO].sql -U postgres prod@zeta:$ pg_dump -n interna -c -f /home/aipin/backup/eventual/[ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE].sql -U postgres prod
Primeiro execute na máquina de testes. Se estiver tudo certo, repita o processo na produção.
PASSO A PASSO:
vi /home/aipin/scripts/dados_avaliacao.lua -- alterar os dados descritos acima
cvs commit /home/aipin/scripts/dados_avaliacao.lua scp /home/aipin/scripts/dados_avaliacao.lua prod:
Após receber os arquivos da Carla Leitão:
matricula;nome;sigla_hablt;situacao;email 9999999;NOME SOBRENOME;AAA;MT;email@conta.com
vi /home/aipin/import/eventual/configuracao.lua
local conf = {
dimensoes = {
-- Deverá conter sigla e título das dimensões que houverem.
-- Seu preenchimento é opcional.
-- A posição das subtabelas na tabela dimensoes será o id de cada dimensão no banco de dados.
{ sigla = "", titulo = "", },
},
indicadores = {
-- Deverá conter as opções de resposta disponíveis.
-- Deverá haver pelo menos uma subtabela preenchida.
-- A posição das subtabelas na tabela indicadores será o id de cada indicador no banco de dados.
[1] = { i5 = "Muito frequentemente", i4 = "Frequentemente", i3 = "Às vezes",
i2 = "Raramente", i1 = "Nunca", texto_na = 'Não precisei de atendimento', },
},
dominios = {
-- Deverá conter os grupos (domínios) de perguntas do questionário.
-- Deverá haver pelo menos uma subtabela preenchida.
-- A posição das subtabelas na tabela dominios será o id de cada domínio no banco de dados.
-- A coluna "comentar" indica se deverá haver um campo de comentário para o domínio ('t'[default] ou 'f').
{ titulo = "Questões gerais", comentar = "f" },
},
-- Cada tabela abaixo corresponde a um perfil no banco de dados.
-- Deverá haver pelo menos uma tabela preenchida.
-- A posição destas tabelas na tabela conf será o id de cada perfil no banco de dados.
-- As colunas nome, sigla e tipo deverão ser preenchidas.
[1] = { -- perfil
nome = "Alunos de Engenharia", sigla = "MT", tipo = "Aluno",
dominios = {
-- Deverá conter uma tabela para cada domínio ao qual o perfil possui acesso..
-- Deverá haver pelo menos uma subtabela preenchida.
-- A posição das subtabelas na tabela dominios será o id de cada domínio no banco de dados.
-- A coluna "ordem" indica a ordem que o domínio aparecerá no questionário (default: id_dominio).
[1] = { -- domínio 1
ordem = 1, -- DEFAULT: id_dominio
perguntas = {
-- Deverá conter uma tabela para cada pergunta pertencente ao domínio correspondente.
-- Se não houver nenhuma pergunta preenchida (subtabela), o domínio terá apenas campo de comentário.
[1] = {
id_dimensao = 1, -- opcional
txthelp = '',
ordem = 1, -- DEFAULT: índice desta tabela
id_indicador = 1, -- DEFAULT: 1
opcao_na = 't', -- DEFAULT: 'f'
texto = "O que você acha ...?",
},
},
},
},
},
}
# Uma boa prática é redirecionar o resultado para um arquivo de log. Exemplo:
cd /home/aipin/import/eventual ./carga_banco.lua > log_eventual_20121
Instruções para iniciar uma nova avaliação para a CCCI, seja de estrangeiros, seja de regressantes.
Como a base é a mesma da avaliação interna, o procedimento de backup é o mesmo de outras avaliações internas. Um caso comum é fazer o backup da última avaliação da CCCI:
@zeta:$ pg_dump -n interna -c -f /home/aipin/backup/eventual/CCCI_puc_[SEMESTRE ANTERIOR].sql -U postgres prod@zeta:$ pg_dump -n interna -c -f /home/aipin/backup/eventual/CCCI_estrangeiros_[SEMESTRE ANTERIOR].sql -U postgres prod
Primeiro execute na máquina de testes. Se estiver tudo certo, repita o processo na produção.
PASSO A PASSO:
$ cp /home/aipin/import/eventual/configuracao_[ AGIP | AGII ].lua /home/aipin/import/eventual/configuracao.lua
$ ftp mimas.rdc.puc-rio.br
...
ftp> get AGIP_<SEMESTRE ANTERIOR>_DT_<DATA>.txt dados_alunos_convenio_<SEMESTRE ANTERIOR>.txt
ftp> get AGIP_<SEMESTRE ATUAL>_AT_<DATA>.txt dados_alunos_convenio_<SEMESTRE ATUAL>.txt
$ ftp mimas.rdc.puc-rio.br
...
ftp> get AGII_<SEMESTRE ATUAL>_DT_<DATA>.txt dados_alunos_estrangeiros_<SEMESTRE ATUAL>.txt
dados_alunos.csv):
$ cd /home/aipin/import/eventual
$ ./convenio2regressantes.lua dados_alunos_convenio_<SEMESTRE ANTERIOR>.txt --excluir dados_alunos_convenio_<SEMESTRE ATUAL>.txt
$ cd /home/aipin/import/eventual
$ rm dados_alunos.csv
$ echo "nome;matricula;cod_curso;cod_habilitacao;cod_enfase;formando;email;resto" > dados_alunos.csv
$ cat dados_alunos_estrangeiros_<SEMESTRE ATUAL>.txt >> dados_alunos.csv
$ ./carga_banco.lua > carga_[ AGIP | AGII ]_<SEMESTRE ATUAL>.log
dados_avaliacao.eventual.nome; nome_html_upperdados_avaliacao.eventual.imagemdados_avaliacao.eventual.descricao; textoFormG; textoFormPdatas_eventual
$ cvs commit /home/aipin/scripts/dados_avaliacao.lua
$ scp -p /home/aipin/scripts/dados_avaliacao.lua prod:
Os relatórios disponíveis são os mesmos da avaliação interna. Como a avaliação dos alunos de intercâmbio tem sido realizadas como avaliações eventuais, a Carla Leitão tem pedido os relatórios de tipo 6 (médias e notas) e tipo 3 (comentários) da avaliação interna (apesar do nome ele serve para AGII também):
alfa:~$ cd /home/aipin/shell alfa:/home/aipin/shell$ psql prod -U postgres -f /home/aipin/backup/eventual/[ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE].sql # por exemplo, /home/aipin/backup/eventual/CCCI_estrangeiros_20152.sql ... alfa:/home/aipin/shell$ ./relatorio_ai_agip.lua -d [ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE]/ --log [ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE]/log.txt -t 6 alfa:/home/aipin/shell$ ./relatorio_ai_agip.lua -d [ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE]/ --log [ESPECIFICAÇÃO_AVALIAÇÃO]_[SEMESTRE]/log.txt -t 3
Por exemplo, o backup e a geração dos relatórios da avaliação de estrangeiros de 2016.2:
cd /home/aipin/backup/eventual mkdir AGII_20162 pg_dump -n interna -c -f /home/aipin/backup/eventual/AGII_20162/CCCI_estrangeiros_20162.sql -U postgres prod # backup cd /home/aipin/shell ./relatorio_ai_agip.lua -d ../backup/eventual/AGII_20162/ --log ../backup/eventual/AGII_20162/log.txt -t 6 # médias e notas ./relatorio_ai_agip.lua -d ../backup/eventual/AGII_20162/ --log ../backup/eventual/AGII_20162/log.txt -t 3 # comentários
A consulta abaixo deve mostrar quantas linhas há em cada período letivo
zeta:~$ psql prod aipin -c "select periodo_letivo,count(*) from curriculo_curso group by periodo_letivo order by 1"
Se o período atual não aparecer, será necessário atualizar os currículos. Para isso é necessário o arquivo com as disciplinas de cada currículo, chamado atualmente de DISCIP_CURRICULO_YYYY.MM.DD.txt (antigamente era chamado curriculos.txt):
zeta:~$ cd /home/aipin/import zeta:/home/aipin/import$ ./insere_curriculos.lua [PERIODO]/curriculos.txt [PERIODO]