DevOps

Visão geral

A API DevOps permite automatizar tarefas comuns aos administradores e desenvolvedores do sistema, responsáveis pela manutenção das bases de dados em operação.

Log transacional

O log transacional do sistema é implementado por meio da tabela iLog. Essa tabela armazena todas as alterações (Log) realizadas pelos usuários na base de dados. Essa tabela é atualizada pelo método ApplyUpdates e nela são registrados os valores anteriores e posteriores de todas as alterações realizadas pelos usuários.

Com todas essas informações é possível fazer um processo de auditoria no sistema com o objetivo de identificar o que foi feito e quando foi feito. Quando há erro de dados em um registro, geralmente se olha o log transacional para verificar toda a “vida” daquele registro na base de dados.

Para mais detalhes, acesse o manual Log transacional.

POST /api/devops/v1/transaction-log/clear

Limpa a tabela iLog com base nas configurações das classes de máximo de dias de manutenção de registros (propriedade “transactionLogMaxDays”).

Escopos de autorização requeridos:

  • api.devops
  • system.clearTransactionLog

Parâmetros:

  • Query string: nenhum
  • Corpo da requisição: nenhum

Exemplo de consumo:

curl -X POST -i https://<your_domain>:<port>/api/devops/v1/transaction-log/clear -u '<user>:<pass>'

Resultado:

HTTP/1.1 200 OK

Replicação de dados

A replicação de dados tem o objetivo de alimentar as bases de homologação, desenvolvimento ou manutenção com massa de dados para testes. Basicamente ela consiste em enviar as inserções, alterações ou remoções de registros de chave positiva ocorridas na base de dados de origem para a base de dados de destino.

Para mais detalhes, acesse o manual Replicação de dados

GET /api/devops/v1/replication/configs

Obtém a lista de configurações de replicação de dados.

Escopos de autorização requeridos:

  • api.devops

Parâmetros:

  • Query string: nenhum
  • Corpo da requisição: nenhum

Exemplo de consumo:

curl -X GET -i https://<your_domain>:<port>/api/devops/v1/replication/configs -u '<user>:<pass>'

Resultado:

HTTP/1.1 200 OK
Content-Type: application/json

[
    {
        "enabled": true,
        "databases": [
            {
                "name": "HOMOLOGACAO",
                "key": 987654
            }
        ],
        "name": "Ambiente de homologação",
        "key": 123456
    },
    {
        "enabled": false,
        "databases": [
            {
                "name": "DESENVOLVIMENTO",
                "key": 456789
            }
        ],
        "name": "Ambiente de desenvolvimento",
        "key": 654321
    }
]

GET /api/devops/v1/replication/configs/<key>

Obtém os dados da configuração de replicação de dados.

Escopos de autorização requeridos:

  • api.devops

Parâmetros:

  • Caminho do ponto de acesso:
    • key: a chave da configuração de replicação de dados
  • Query string: nenhum
  • Corpo da requisição: nenhum

Exemplo de consumo:

curl -X GET -i https://<your_domain>:<port>/api/devops/v1/replication/configs/123456 -u '<user>:<pass>'

Resultado:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "enabled": true,
    "databases": [
        {
            "name": "HOMOLOGACAO",
            "key": 987654
        }
    ],
    "name": "Ambiente de homologação",
    "key": 123456
}

POST /api/devops/v1/replication/configs/<key>/sync

Executa a sincronização para a chave da configuração de dados informada.

Escopos de autorização requeridos:

  • api.devops

Parâmetros:

  • Caminho do ponto de acesso:
    • key: a chave da configuração de replicação de dados
  • Query string: nenhum
  • Corpo da requisição: nenhum

Exemplo de consumo:

curl -X POST -i https://<your_domain>:<port>/api/devops/v1/replication/configs/123456/sync -u '<user>:<pass>'

Resultado:

HTTP/1.1 200 OK
Content-Type: application/json

[
    {
        "targetDatabase": "HOMOLOGACAO",
        "executionTime": 74,
        "configName": "Ambiente de homologação",
        "endVersion": 2000,
        "updateVersions": [
            3000,
            4000
        ],
        "success": true,
        "startVersion": 1000,
        "sourceDatabase": "PRODUCAO",
        "errorMessage": "",
        "stats": {
            "numDeletes": 0,
            "numUpdates": 15,
            "numTransactionLogs": 0,
            "numTargetEntries": 16,
            "numInserts": 0
        }
    }
]

POST /api/devops/v1/replication/sync

Executa a replicação de dados para todas as configurações de replicação de dados habilitadas.

Escopos de autorização requeridos:

  • api.devops

Parâmetros:

  • Query string: nenhum
  • Corpo da requisição: nenhum

Exemplo de consumo:

curl -X POST -i https://<your_domain>:<port>/api/devops/v1/replication/sync -u '<user>:<pass>'

Resultado:

HTTP/1.1 200 OK
Content-Type: application/json

[
    {
        "targetDatabase": "HOMOLOGACAO",
        "executionTime": 74,
        "configName": "Ambiente de homologação",
        "endVersion": 2000,
        "updateVersions": [
            3000,
            4000
        ],
        "success": true,
        "startVersion": 1000,
        "sourceDatabase": "PRODUCAO",
        "errorMessage": "",
        "stats": {
            "numDeletes": 0,
            "numUpdates": 15,
            "numTransactionLogs": 0,
            "numTargetEntries": 16,
            "numInserts": 0
        }
    }
]

Atualização do sistema

A atualização de sistema atualiza todos os módulos e produtos que compõem o sistema, incluindo o Engine.

Para mais detalhes, acesse o manual Atualizar sistema.

POST /api/devops/v1/update/system

Executa a atualização do sistema para o destino informado. Quando não informada origem, esta será a base na qual a API foi executada.

Escopos de autorização requeridos:

  • api.devops

Parâmetros:

  • Query string: nenhum
  • Corpo da requisição: JSON contendo quaisquer propriedades de um objeto UpdateOptions.
    • targetDBName e targetServer são propriedades requeridas.
    • targetAuthToken, targetUserName e targetPassword não são requeridos, mas se o token não for informado, o par de credenciais precisa ser necessariamente preenchido.

Exemplo de consumo:

curl -X POST -i https://<your_domain>:<port>/api/devops/v1/update/system
    -u '<user>:<pass>'
    -H 'Content-Type: application/json'
    -d '{
            targetDBName = "DB-EXAMPLE"
            targetServer = "https://db-example.com/"
            targetAuthToken = "01ffjhgnRlPncbvASd*pqnXdlLKgPcTktEogyrE83pHXJRRr*kdjhvERDnaPlzdo="
        }'

Resultado

HTTP/1.1 200 OK
Content-Type: application/json

{
    "options": {
        "onlineIndexDrop": null,
        "allowExclusiveProducts": false,
        "updateType": -1891604155,
        "trackingId": "FF14F4544EFB4328A9240ECEFB5F264F",
        "ignoreOtherEngineServers": false,
        "targetUserName": "",
        "onlineIndexCreation": null,
        "sourceUserName": "",
        "targetPassword": "",
        "sourceAuthToken": "",
        "ignoreSystemRequirements": false,
        "disableEngineUpdate": false,
        "disableDatabaseSchemaUpdate": false,
        "disableEngineRestart": false,
        "sourcePassword": "",
        "preserveUnlicensedProducts": false,
        "sourceDBName": "",
        "targetServer": "https://db-example.com",
        "recipients": "",
        "products": [
            -179814185,
            -179814185,
            -179814846,
        ],
        "sourceServer": "",
        "targetAuthToken": "",
        "targetDBName": "DB-EXAMPLE",
        "messageComplement": ""
    },
    "versions": [
        90000001721672,
        90000001721672,
        90000001721673
    ],
    "report": "## Atualização de sistema da base DB-EXAMPLE com sucesso [...]",
    "schemaChanges": [],
    "stats": {
        "numSourceEntries": 7761,
        "numInserts": 1,
        "operations": {
            "Cópia de registros": 6054,
            "Consultando classes e arquivos órfãos": 363,
            "Atualizando o esquema da base de dados": 0,
            "Tempo total da atualização": 81181,
            "Consultando esquema da base de dados": 1919,
            "Consultando dados na origem": 22040,
            "Consultando dados no destino": 27174,
            "Atualizando definições do modelo de dados": 15150,
            "Verificando classes com nomes duplicados": 189,
            "Atualizando produtos": 52277,
            "Removendo produtos não licenciados": 7084,
            "Filtrando os registros": 2501,
            "Atualizando registros da classe \"Tabelas do sistema\"": 373,
            "Executando scripts de pós-atualização": 3781,
            "Obtendo modelo de dados definido pelas classes": 4572,
            "Ajustando URL dos arquivos": 371,
            "Identificando alterações de índices a serem realizadas": 83,
            "Movendo classes e arquivos órfãos": 872,
            "Obtendo notas de liberação da versão": 376,
            "Sincronizando papéis de usuário": 1240,
            "Ajustando permissões": 4672,
            "Gravando dados no destino": 568,
            "Identificando alterações de tabelas a serem realizadas": 92
        },
        "numDeletes": 0,
        "numUpdates": 1,
        "numTargetEntries": 15288
    },
    "releaseNotes": [],
    "postUpdateScripts": [],
    "permissionChanges": [],
    "duplicateNameClasses": [],
    "targetDatabaseVersionInfo": {
        "client": {
            "minor": 5,
            "name": "libpq 14.5",
            "major": 14
        },
        "server": {
            "minor": 6,
            "name": "PostgreSQL 9.6.24",
            "major": 9
        }
    },
    "success": true,
    "errors": [],
    "orphanRecords": [
        {
            "tableName": "classe",
            "path": "/Dados/Sistema/Órfãos/vfsTestDir_160834478154",
            "key": 90000000031197
        }
    ],
    "messages": [],
    "ddlStatements": [],
    "warnings": [],
    "products": [
        {
            "name": "Product1",
            "key": -179814185
        },
        {
            "name": "Product2",
            "key": -179814185
        },
        {
            "name": "Product3",
            "key": -179814846
        },
    ]
}