Capítulo 4 — Scripts e formatos de dados
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX013.
flowchart TD
N0["4.1 Formatos de dados"]
N1["Laboratório — Conferência de uma semana de resultado"]
N2["4.2 Uma verificação de backups"]
N3["4.3 Dados ruins"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX013"]
Desenho lógico
flowchart LR
N0["4.1 Formatos de dados"]
N1["Laboratório — Conferência de uma semana de resultado"]
N2["4.2 Uma verificação de backups"]
N3["4.3 Dados ruins"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX013"]
[4.1 Formatos de dados]
|
v
[Laboratório — Conferência de uma semana de resultado]
|
v
[4.2 Uma verificação de backups]
|
v
[4.3 Dados ruins]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX013]
Objetivos de aprendizagem
Você vai (1) ler exportações em CSV e JSON; (2) escrever um script para conferir os resultados dos backups; (3) tratar dados ruins com segurança.
4.1 Formatos de dados
Os sistemas da Linden exportam dados em formatos diferentes. O appliance de backup grava um arquivo CSV toda noite, com uma linha por clínica: data, nome da clínica, arquivos copiados e status. A exportação de auditoria do sistema de gestão clínica é em JSON, um formato de chaves e valores aninhados. Nadia aprende a ler os dois com a biblioteca padrão do Python. Daniel explica que entender os formatos é uma habilidade técnica central, porque a maioria das verificações de segurança começa lendo a exportação de algum sistema e transformando-a numa resposta clara. Ela guarda arquivos de exemplo de cada formato para testar seus scripts.
Laboratório — Conferência de uma semana de resultados de backup
# Check a week of nightly backup results (synthetic CSV rows: date, practice, files, status).
rows = """2026-03-01,Elmfield,4120,ok
2026-03-02,Elmfield,4133,ok
2026-03-03,Elmfield,0,disk full
2026-03-04,Elmfield,4150,ok
2026-03-05,Elmfield,4161,ok
2026-03-06,Elmfield,0,disk full
2026-03-07,Elmfield,0,disk full
2026-03-01,Norbury,2210,ok
2026-03-02,Norbury,2215,ok
2026-03-03,Norbury,2219,ok
2026-03-04,Norbury,2224,ok
2026-03-05,Norbury,2230,ok
2026-03-06,Norbury,2233,ok
2026-03-07,Norbury,2241,ok
2026-03-07,Westcott,3100""".splitlines()
summary, unreadable = {}, 0
for r in rows:
f = r.split(",")
if len(f) != 4: unreadable += 1; continue
d, p, _, s = f
ok, n, last = summary.get(p, (0, 0, "never"))
summary[p] = (ok + (s == "ok"), n + 1, d if s == "ok" else last)
for p, (ok, n, last) in sorted(summary.items()):
print(f"{p}: {ok}/{n} nights ok, last success {last}" + (" <-- CHECK" if ok < n else ""))
print(f"unreadable rows: {unreadable}")
Execute com python3 lab_backups.py. Saída verificada:
Elmfield: 4/7 nights ok, last success 2026-03-05 <-- CHECK
Norbury: 7/7 nights ok, last success 2026-03-07
unreadable rows: 1
4.2 Uma verificação de backups
Nadia escreve um script que lê uma semana de resultados sintéticos de backup e relata, para cada clínica, quantas noites tiveram sucesso e a data do último sucesso. O laboratório mostra que a clínica de Elmfield falhou em três noites, incluindo as duas últimas. Grace não tinha percebido porque o appliance só envia e-mail quando há sucesso. O script de Nadia transforma uma falha silenciosa numa falha visível. Grace encontra um disco cheio no servidor de imagens de Elmfield e libera espaço, e o backup da noite seguinte tem sucesso.
4.3 Dados ruins
Daniel pergunta o que acontece se faltar um campo numa linha ou se um status estiver escrito errado. Nadia acrescenta verificações: as linhas com campos faltando são relatadas como ilegíveis, em vez de ignoradas, e qualquer status diferente de "ok" conta como falha. Tratar valores desconhecidos como falhas é mais seguro do que tratá-los como sucesso, porque um script de monitoramento que esconde problemas é pior do que nenhum. Ela também registra no topo do arquivo o formato esperado pelo script, para que os futuros usuários saibam o que ele pressupõe.
Exemplo resolvido
Nadia lê exportações em CSV e JSON, escreve uma verificação de backups que encontra três falhas em Elmfield e trata com segurança as linhas ruins.
Caso sintético. As clínicas e os resultados são sintéticos.
Erros e limites
Os scripts quebram quando os formatos de exportação mudam. Os e-mails de sucesso criam falso conforto.
Exercícios
-
EX013 — Falha silenciosa. Por que Grace não tinha percebido as falhas de Elmfield? Rubrica: 3 = o appliance só enviava e-mail quando havia sucesso;; 2 = e-mails de sucesso;; 1 = vago;; 0 = nenhuma.
-
EX014 — Resultado do laboratório. O que o laboratório relatou para Elmfield? Rubrica: 3 = 4 de 7 noites ok, último sucesso em 2026-03-05;; 2 = três falhas;; 1 = vago;; 0 = nenhuma.
-
EX015 — Status desconhecido. Por que tratar valores de status desconhecidos como falhas? Rubrica: 3 = esconder problemas é pior do que não monitorar;; 2 = padrão seguro;; 1 = sucesso;; 0 = nenhuma.
-
EX016 — Causa raiz. O que causou as falhas de Elmfield? Rubrica: 3 = um disco cheio no servidor de imagens;; 2 = disco;; 1 = rede;; 0 = nenhuma.
Síntese
Ler exportações com pequenos scripts torna visíveis as falhas silenciosas, desde que os dados ruins sejam tratados com cautela.
Continue estudando — aula 04 (capítulo 04 de 18)
← Capítulo 03 · Índice das aulas · Capítulo 05 →
Continue para a próxima aula já escrita.