-
Notifications
You must be signed in to change notification settings - Fork 0
/
modificacoes.txt
95 lines (76 loc) · 6.82 KB
/
modificacoes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
######### 22/10 - Arcanjo #########
metodos adicionados (todos amplamente testados):
bool Management::regexInterfaceName(Intf *intf);
bool Management::regexIP(string);
void DeviceWindow::setType(string);
bool Management::existIP(string ip);
void Management::writeTopology();
void Management::readTopology();
string Management::subStrInterfaceType(str); // faz a substring do nome da interface para descobrir o tipo! eh funcao de mgmt e nao da propria interface
bool existStrLinkMismatch(Interface *intf1,Interface* intf2) // eh o cara q vai fazer a validacao para os tipos de link. por exemplo, Fa nao pode conectar com Se (Serial)
----> CONSERTEI O ESCOPO DA AREA DA TOPOLOGIA!
----> Todas as partes de expressoes regulares estao OK!
link window adicionado warning, por exemplo:
dev 1 fa0/0 -> dev 2 fa0/0
dev 1 fa0/1 -> dev 2 fa0/1
como todas as interfaces de dev1 e dev2 estao conectadas, todas irao aparecer na linkwindow para fazer o remove, e o q q acontece se o cara seleciona dev1 fa0/1 e dev2 fa/0? ou dev1 fa0/0 e dev2 fa0/1 ----- acontece um warning!
Implementei a serializacao atraves de TXT pq achei q seria mais facil doq eu me empanhar em aprender a serializar objeto (achei umas paradas mto foda). Qual foi a ideia da serializacao? Simples, foi a ideia de SAVE e LOAD. Entao, funciona assim, o cara tem uma topologia bonita e ele vai la e da WRITE (evento tecla w - provisoriamente), pronto, salvou a topologia em um .txt (salva o nome do device, interfaces e links). pronto, agora q ele salvou, quando eh q ele usa? ela so vai usar isso qndo abrir o programa!!!!! entao, no momento, eu nao fiz a validacao de o cara dar um read com uma pologia ja existe, ou seja, vai duplicar as paradas. Entao ta assim, o cara tem uma topologia bonita.. aperta "w" (depois isso vira um botao) e pronto, fez o save.. no outro dia, outra hora, qndo abrir o programa e quiser carregar a topologia ele aperta "r" (read), q tb vai virar um botao depois.Fiz varias testes, desconectando links, editando devices, esrevendo e lendo e deu tudo ok!
Ou seja, o Read, presupoe que nao existe nenhum device na topologia. se vc remover todos com o remove device e na sequencia der um READ, tudo estara na devida ordem! (pensando no seu problema, o metodo readTopology() qndo finalizado alguem deve emitir o sinal, ja esta feito)
######### 23/10 - Fernando ##########
-> Finalizados os signals que faltavam, que era só quando se inseria um link.
-> Consertado a função 'Managment::existStrMismatch', havia um erro na comparação das interfaces (nunca inseria um Serial).
######### 24/10 - Fernando ##########
-> Modificado o layout do programa, conforme mostrei em sala
-> Os botões de 'open' e 'save' estão funcionais, também substitui o atalho por 'Crtl+R' e 'Crtl+S'
-> O redimensionamento também está funcionando, só não tratei caso haja dispositivos fora da nova área
######### 25/10 - Fernando e Arcanjo #########
-> Continuação das funções do novo layout
-> Editar funcionando
-> Bugs de editar consertados
######## 25/10 - Arcanjo ########
-> Implementado botao 'kill' em Management acrescentado a funcao void Management::killTopology e ajustado a flag para gravar e escrita.
-> Adicionado em MainWindow o slot killTopologyEvent();
######## 29/10 - Fernando #######
-> Implementada a tab 'Status'.
-> Configuracao da cor dos links de acordo com o status dos devices.
-> Removida a funcao 'setInterfaceWired()' e implementada 'getInterface(string)' para corrigir o ponteiro errado dos links.
####### 12/11 - Arcanjo #######
-> Persistencia feita no banco de dados e nao mais em .txt Para isso foi criada uma nova tabela Link - feito updates nos metodos Management::writeTopology() e readTopology() - como vc pode ver no diretorio createDB
-> Script SQL de criacao das tabelas encontra-se em createDB/create_tables.sql (****** FACA ISSO ANTES DE QLQR COISA ******)
**** -> (faca as configuracoes abaixo no sql, senao o script e o QT nao vai conseguir fazer nada no Banco!)
**** -> Nome do databse: mydb
**** -> user: root
**** -> password: root
-> Script para gerar historico aleatorio no banco de dados totalmente flexivel em relacao as datas de geracao, encontra-se em: /script/db_simulate.pl
**** -> recebe como parametro:
# ARG 0 = ID MAXIMO DAS INTERFACES!
# ARG 1 = Qnt de inserts a ser gerados!
# ARG 2 = BYTES_IN_MAX
# ARG 3 = BYTES_OUT_MAX
# ARG 4 = DELTA T em segundos a cada iteracao!
# ARG 5 = DATA FUTURA SOMENTE =>=> YYYY-MM-DD, se deixado em branco sera a data atual.
-> Script para forcar o status de qualquer interface para Up ou Down, para simular a indisponibilidade de uma interface de um device; encontra-se em /script/intf_status_simulate.pl
***** -> parametros:
# ARG 0 = nome do host
# ARG 1 = nome da interface
# ARG 2 = status = Up|Down
-> Adicionada uma Thread que a cada X segundos (neste momento, X = 3), chama o metodo Management::updateStatusTopology() que faz uma query no banco de dados, buscando o status de todas as interfaces existentes na topologia OU SEJA tem que dar um ***SAVE NO BOTAO**** para os dados entrar na persistencia para isso aqui comecar a funcionar. Sendo assim, como tem a thread rodando a cada 3 segundos se vc utilizar o script para simular o status down de uma interface o link vai ficar vermelho na proxima iteracao da thread.
-> Adicionei varios prints para vc perceber os esquemas!!!
-> Foi feito um POG:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(forceRepaint()));
timer->start((1000*loopSeconds)+1); // 1 milisegundo a mais apos a thread executar, POG pq nao tem como eu ativar um repaint
// no mainwindow atraves da classe DbThread, eu tentei passar MainWindow no construtor mais da zica pq MainWindow ja tem referencia
// para Thread e entao nao tem como, seria uma contradicao vc instanciar uma classe que tem referencia da outra e vice-versa.
thread->start();
-> Verificado o metodo Management::query((QString beginTimeStamp, QString endTimeStamp,QString hostname, QString intfName))
**** -> este metodo eh ativado por MainWindow usando a tecla 'q' de "query" e na sequencia ele faz a busca no banco pelo tempo inicial, final, o host e o nome da interface e tras os bytes entrantes e saintes da interface de modo ordenado! Sobre a sintaxe da DATA tem comentarios no codigomas, eh do tipo YYYY-MM-DD ou YYYY-MM-DD HH:MM:SS
-> dentro do arquivo script/libmysql eh a biblioteca que o perl usa para conectar no banco.
***********************************************************
@@@@@@@@@@@@@@@@@@@@@ proximos passos @@@@@@@@@@@@@@@@@@@@@
***********************************************************
Ultima coisa que falta a nivel de codigo:
Finalizar os graficos para acabar tudo!
dpois -> revisar o documento que foi entregue ate o dia 16/11!!!!
dpois -> finalizar a segunda parte ate o dia 30/11!!!
***********************************************************