☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta ABSTIME. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta ABSTIME. Mostrar todas as mensagens

quarta-feira, 13 de março de 2019

O Relógio Invisível do CICS : Quando você Descobriu que Milhões de Transações Dependiam de um Tempo que Ninguém Conseguia Enxergar

 

Bellacosa Mainframe e o relogio invisivel do cics

☕ Um Café no Bellacosa Mainframe

O Relógio Invisível do CICS

Quando um Jovem Programador COBOL Descobriu que Milhões de Transações Dependiam de um Tempo que Ninguém Conseguia Enxergar

"Toda investigação começa com uma pergunta. No mundo do CICS, ela quase sempre é a mesma: exatamente quando isso aconteceu?"

O velho relógio da parede marcava 02h17 da madrugada.

No CPD, apenas o zumbido constante dos refrigeradores quebrava o silêncio. As luzes fluorescentes lançavam sombras longas sobre os armários metálicos, enquanto dezenas de fitas magnéticas repousavam como livros esquecidos em uma biblioteca de segredos.

Era a primeira semana de trabalho de Eduardo, um jovem programador COBOL recém-chegado ao banco.

Seu primeiro incidente parecia simples.

Um cliente afirmava que uma transferência de R$ 28.750,00 havia desaparecido.

O dinheiro saiu da conta.

Nunca chegou ao destino.

Ou pelo menos era isso que todos acreditavam.

O analista mais experiente do departamento, um senhor de cabelos grisalhos chamado apenas de Alberto, aproximou-se calmamente.

Sem olhar para o código perguntou:

— Você já perguntou ao CICS que horas eram?

Eduardo estranhou.

— Mas eu sei a hora...

Alberto sorriu.

— Não...

— Você sabe a hora que o relógio mostra.

— Eu quero saber a hora que o CICS acredita que era.

Naquele instante começava uma das maiores lições da carreira daquele jovem programador.

E também a nossa.


O Mistério do Tempo Invisível

Todo iniciante acredita que obter a data é algo extremamente simples.

Em Java existe:

LocalDateTime.now()

No Python:

datetime.now()

No C#:

DateTime.Now

Então por que o CICS inventou dois comandos?

  • ASKTIME

  • FORMATTIME

Por que não retornar simplesmente:

29/07/2026

10:45:22

A resposta está escondida dentro da própria arquitetura do CICS.

E ela é muito mais elegante do que parece.


O Tempo Não Existe

Parece estranho.

Mas, para um computador, datas não existem.

Nem horas.

Nem calendários.

Nem domingos.

Nem julho.

Muito menos sexta-feira.

Tudo isso é invenção humana.

O computador entende apenas números.

É exatamente por isso que o CICS criou um idioma próprio.

Esse idioma chama-se:

ABSTIME


ABSTIME: O Relógio Secreto do Mainframe

ABSTIME significa:

Absolute Time

Não é uma data.

Não é uma hora.

Não é um calendário.

É simplesmente um número gigantesco que representa um instante exato da existência do sistema.

Imagine uma régua infinita.

--------------------------------------------------------------->

Cada ponto representa um momento.

O ABSTIME é exatamente um desses pontos.

Ele não diz:

Quinta-feira.

Ele diz:

O instante número XXXXXXX desde a referência temporal usada pelo CICS.

É uma forma extremamente eficiente de representar o tempo.


Por que isso é genial?

Imagine duas operações bancárias.

Primeira:

10:45:10

Segunda:

10:45:15

Quanto tempo passou?

Nós fazemos mentalmente.

Cinco segundos.

Mas o computador precisaria interpretar:

  • dia

  • mês

  • ano

  • hora

  • minuto

  • segundo

Depois calcular.

Com ABSTIME?

Basta fazer:

Fim

-

Início

Pronto.

É matemática pura.

Nenhum calendário envolvido.


ASKTIME — Perguntando ao Universo

ASKTIME é um dos comandos mais simples do CICS.

E justamente por isso muitos subestimam sua importância.

EXEC CICS
     ASKTIME
     ABSTIME(WS-ABS-TIME)
END-EXEC.

Parece pequeno.

Mas ele acabou de conversar diretamente com o relógio do z/OS.

Imagine um funcionário indo até a sala onde fica o relógio atômico do banco.

Ele pergunta:

— Qual é o instante atual?

O relógio responde.

Mas responde em um idioma interno.

Não em português.

Nem inglês.

Responde em ABSTIME.


FORMATTIME — O Tradutor

Agora entra o segundo personagem.

FORMATTIME.

Ele olha para aquele número enorme e diz:

— Ah...

Já entendi.

Isso corresponde a:

29/07/2026

10:45:22

Ou então:

FRIDAY

Ou:

JULY

Ou:

2026

Tudo depende do formato solicitado.

Ele não cria informação.

Apenas traduz.


Uma Analogia Bellacosa

Imagine uma antiga máquina Enigma da Segunda Guerra Mundial.

O operador recebe:

YTRXKMQ

Para qualquer pessoa aquilo parece lixo.

Mas basta colocar na máquina correta.

Resultado:

ATAQUE AO AMANHECER

ABSTIME é a mensagem criptografada.

FORMATTIME é a máquina que decifra.


O Fluxo Completo

O caminho do tempo dentro do CICS é extremamente elegante.

Relógio do Hardware

↓

z/OS

↓

CICS

↓

ASKTIME

↓

ABSTIME

↓

FORMATTIME

↓

29/07/2026

10:45:22

Observe que o relógio nunca entrega diretamente uma data legível.

Existe uma camada de abstração.

Isso torna todo o sistema mais eficiente.


O Erro dos Programadores Iniciantes

É muito comum encontrar algo assim:

ASKTIME

FORMATTIME

...

ASKTIME

FORMATTIME

...

ASKTIME

FORMATTIME

Tudo dentro da mesma transação.

Isso é desperdício.

O relógio praticamente não mudou.

O correto geralmente é:

ASKTIME

↓

Guardar ABSTIME

↓

Reutilizar

É uma pequena otimização.

Mas imagine milhões de transações por dia.

Cada microssegundo economizado vira horas de processamento ao longo do ano.

É exatamente assim que os grandes sistemas sobrevivem durante décadas.


Um Caso Real de Auditoria

Imagine um PIX.

Às 14h15m22s.

O cliente afirma:

Nunca fiz essa transferência.

O banco consulta o log.

Encontra:

Data

Hora

Terminal

IP

Operador

Transação

Programa

Usuário RACF

Tudo isso nasceu de um único comando.

ASKTIME

Sem ele...

Toda a investigação estaria comprometida.


A Ciência do Tempo

Existe outro detalhe interessante.

Datas são péssimas para cálculos.

Imagine descobrir quanto tempo um programa levou para executar.

Com datas formatadas:

10:45:22

↓

10:45:24

É preciso interpretar texto.

Com ABSTIME:

Final

-

Inicial

=

2 segundos

Muito mais simples.

Muito mais rápido.


Curiosidade Histórica

Nos primeiros sistemas comerciais, muitos programas armazenavam datas apenas com dois dígitos para o ano.

Foi daí que nasceu o famoso Bug do Milênio (Y2K).

Quando chegou o ano 2000, vários sistemas interpretaram "00" como 1900.

O CICS, com sua abordagem baseada em ABSTIME e formatação controlada, ajudou a reduzir vários desses problemas em aplicações bem projetadas.

Essa história é um lembrete de que o tratamento correto do tempo nunca foi um detalhe trivial.


O Poder do DATESEP

Pouca gente presta atenção nisso.

DATESEP('/')

Resultado:

29/07/2026

DATESEP('-')

Resultado:

29-07-2026

DATESEP('.')

Resultado:

29.07.2026

Sem separador:

29072026

Extremamente útil para integrações.

Principalmente arquivos batch.


O Dia da Semana

FORMATTIME também sabe dizer:

MONDAY

TUESDAY

FRIDAY

Imagine um relatório.

Você quer saber:

Quantas transações aconteceram aos domingos?

Não precisa calcular.

FORMATTIME entrega.


O Nome do Mês

Também pode retornar:

JANUARY

FEBRUARY

MARCH

Parece detalhe.

Mas relatórios gerenciais adoram isso.

Imagine entregar ao diretor:

07

Agora compare com:

JULY

Muito mais amigável.


A Grande Diferença Entre Registrar e Medir

Um erro conceitual comum é acreditar que ASKTIME existe apenas para colocar data em relatórios.

Na verdade existem dois grandes usos.

Primeiro:

Registrar eventos.

Segundo:

Medir tempo.

Imagine:

ASKTIME

↓

Processamento

↓

ASKTIME

Agora basta comparar os dois ABSTIMEs.

Você descobre quanto tempo a rotina levou.

É exatamente assim que muitas medições de desempenho são realizadas em aplicações CICS.


Performance e Escalabilidade

Grandes bancos executam dezenas de milhares de transações por segundo.

Pequenas decisões fazem enorme diferença.

Capturar um único ABSTIME no início da Unidade de Trabalho e reutilizá-lo evita chamadas repetidas ao relógio do sistema, reduz overhead e mantém todos os registros daquela transação com a mesma referência temporal.

Esse cuidado também facilita auditorias, pois cada etapa compartilha o mesmo instante de origem quando isso faz sentido para o negócio.


Curiosidade

Muitos programadores COBOL passam anos utilizando ASKTIME sem nunca descobrir que o verdadeiro protagonista é o ABSTIME.

O comando parece apenas pegar a hora.

Na realidade ele captura um timestamp extremamente preciso utilizado internamente pelo CICS para cálculos temporais.

FORMATTIME é apenas o intérprete.


Dica de Ouro

Quando estiver projetando uma aplicação CICS, faça sempre estas perguntas:

  • Vou precisar apenas exibir a data?

  • Vou calcular intervalos entre eventos?

  • O mesmo horário deve representar toda a transação?

  • Existe um padrão corporativo para datas?

  • Os logs precisam ser comparados com Db2, VSAM, MQ ou outros sistemas?

Essas respostas influenciam diretamente a forma como você utilizará ASKTIME e FORMATTIME.


O Easter Egg do Bellacosa Mainframe 🕵️

Existe um velho comentário entre programadores veteranos:

"Quando um problema parece impossível de reproduzir, pergunte primeiro ao relógio."

Não é superstição.

Muitos incidentes em produção acabam sendo explicados apenas quando alguém reconstrói a sequência exata dos acontecimentos usando os timestamps registrados pela aplicação.

Em inúmeros casos, o "culpado" não era o programa COBOL, mas uma condição de corrida, um bloqueio temporário, uma transação concorrente ou uma diferença de poucos milissegundos entre operações críticas.

O relógio não mente.

Ele apenas registra.

Quem interpreta a história são os engenheiros.


Arquivo Confidencial nº 32 — O Caso do Relógio Invisível

Quando Eduardo finalmente terminou sua investigação, descobriu algo inesperado.

A transferência nunca desaparecera.

Dois programas distintos registraram o mesmo evento utilizando horários capturados em momentos diferentes. Um deles consultou o relógio logo no início da transação; o outro, segundos depois, após uma espera por bloqueio de recurso. Os logs pareciam contraditórios, mas o dinheiro havia seguido exatamente o fluxo esperado.

Na manhã seguinte, Alberto fechou o relatório, tomou um gole de café e disse:

— Está vendo por que nunca perguntamos apenas "que horas são"?

— Perguntamos "qual foi o instante registrado pelo CICS".

Eduardo sorriu.

Naquela madrugada ele deixou de ser apenas um programador COBOL.

Começava a pensar como um investigador de sistemas.

E desde então, sempre que escrevia um novo programa, lembrava-se de uma regra silenciosa que parecia ecoar pelos corredores do CPD:

"Os usuários enxergam datas. Os programadores enxergam horas. Mas o CICS enxerga apenas instantes."

Talvez seja por isso que, em todo grande mainframe, o relógio mais importante nunca aparece na parede. Ele vive escondido, contando silenciosamente a história de bilhões de transações — um ABSTIME de cada vez.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...