Automacao para identificar, gerar relatorios e desativar usuarios inativos no SAP Analytics Cloud (SAC).
Extrai dados diretamente via API (SCIM + Activity Log), identifica usuarios sem acesso nos ultimos 30 dias, gera relatorios em CSV e Excel, envia por email e opcionalmente desativa os usuarios via API SCIM.
- Python 3.9+ instalado (python.org/downloads)
- Credenciais OAuth do SAC (Client ID e Client Secret) com permissao para SCIM API e Activity Log API
- Acesso ao servidor SMTP para envio de email (caso queira receber os relatorios)
git clone https://github.com/LuanAlves2/SAP-Analytics-Cloud-User-Inactivity-Automation.git
cd SAP-Analytics-Cloud-User-Inactivity-Automationpip install -r requirements.txtDependencias: pandas, requests, python-dotenv, openpyxl, schedule
Na raiz do projeto, crie um arquivo chamado .env com todas as configuracoes sensiveis:
CLIENT_ID=seu_client_id_aqui
CLIENT_SECRET=seu_client_secret_aqui
OAUTH_TOKEN_URL=https://SEU_TENANT.authentication.br10.hana.ondemand.com/oauth/token/alias/SEU_TENANT.cf-br10
TENANT_URL=https://SEU_TENANT.br10.hcs.cloud.sap
EMAIL_SMTP_HOST=smtp.seuservidor.com.br
EMAIL_SMTP_PORT=25
EMAIL_FROM=bi@seuservidor.com.br
EMAIL_DESTINATARIOS=email1@empresa.com,email2@empresa.com,email3@empresa.com
As credenciais OAuth sao obtidas no SAP BTP Cockpit, no service key do XSUAA vinculado ao SAC.
Abra o arquivo config.py e ajuste:
Usuarios protegidos (nunca serao desativados):
USERS_PROTEGIDOS = [
"LUANARANTES",
"MARCOS_LOBO",
# Adicione outros aqui
]Flags de desativacao:
DESATIVAR = False # True = desativa usuarios via API / False = apenas gera relatorio
DESATIVAR_APENAS_UM = False # True = desativa apenas o primeiro (para teste)python main.py- Autentica no SAC via OAuth (client_credentials)
- Extrai todos os usuarios via SCIM API (
/api/v1/scim/Users) - Extrai o log de atividades via Activity Export API (
/api/v1/audit/activities/exportActivities) - Identifica inativos — usuarios sem acesso nos ultimos 30 dias
- Aplica protecao — remove da lista os usuarios definidos em
USERS_PROTEGIDOS - Gera relatorios:
usuarios_inativos_para_desativar.csvusuarios_inativos_para_desativar.xlsx- Ambos incluem: usuario, nome, email, ultimo acesso, dias sem acesso e empresa
- Envia email com resumo visual (metricas, taxa de inatividade) e relatorios em anexo
- Desativa usuarios via API SCIM (se
DESATIVAR = True)
├── main.py # Script principal — orquestra todo o fluxo
├── service.py # Wrapper para rodar como servico Windows (NSSM)
├── config.py # Configuracoes: usuarios protegidos, flags, colunas CSV
├── sac_utils.py # Integracao com as APIs do SAC (SCIM, CSRF, Activities)
├── export_utils.py # Geracao do relatorio Excel
├── email_utils.py # Envio de email com anexos via SMTP
├── requirements.txt # Dependencias Python
├── agendar_tarefa.bat # Agendamento via Windows Task Scheduler
├── instalar_servico_nssm.bat # Instalacao como servico via NSSM
├── .env # Credenciais e configuracoes sensiveis (nao versionado)
├── testes/ # Scripts de teste e validacao
└── final/ # Versoes anteriores do script
Todas as configuracoes sensiveis ficam no .env (nao versionado no git):
| Variavel | Descricao |
|---|---|
CLIENT_ID |
Client ID do XSUAA (SAP BTP) |
CLIENT_SECRET |
Client Secret do XSUAA |
OAUTH_TOKEN_URL |
URL do endpoint OAuth do tenant |
TENANT_URL |
URL base do tenant SAC |
EMAIL_SMTP_HOST |
Servidor SMTP para envio de email |
EMAIL_SMTP_PORT |
Porta do SMTP (padrao: 25) |
EMAIL_FROM |
Email remetente |
EMAIL_DESTINATARIOS |
Lista de destinatarios separados por virgula |
Existem duas opcoes para agendar a execucao toda sexta-feira as 10h:
Instala como servico Windows usando o NSSM. O servico fica rodando em segundo plano e executa o script no horario agendado. Reinicia automaticamente com o Windows.
Instalacao:
- Baixe o NSSM em nssm.cc/download
- Edite o
instalar_servico_nssm.batcom os caminhos corretos do Python e do projeto no servidor - Execute como administrador
Comandos uteis:
nssm status SAC_Usuarios_Inativos # ver status do servico
nssm restart SAC_Usuarios_Inativos # reiniciar
nssm stop SAC_Usuarios_Inativos # parar
nssm remove SAC_Usuarios_Inativos # remover servicoLogs: o servico grava logs em service.log na raiz do projeto (rotacao automatica em 5MB).
Nota para Python embeddable: Se usar a versao embeddable do Python no servidor, edite o arquivo python3XX._pth e adicione o caminho completo do projeto para que os modulos sejam encontrados.
Cria uma tarefa agendada que executa o script diretamente. Mais simples, mas depende do usuario estar logado.
- Clique com botao direito em
agendar_tarefa.bat> Executar como administrador
Para verificar ou editar:
- Abra o Agendador de Tarefas (
taskschd.msc) e procure porSAC_Usuarios_Inativos
Para remover:
schtasks /delete /tn "SAC_Usuarios_Inativos" /f1. POST /oauth/token (client_credentials) --> access_token
2. GET /api/v1/scim/Users --> lista de usuarios (paginado)
3. GET /api/v1/csrf --> CSRF token + cookies
4. POST /api/v1/audit/activities/exportActivities --> log de atividades (paginado)
5. GET /api/v1/scim/Users/{id} --> objeto do usuario (para desativacao)
6. PUT /api/v1/scim/Users/{id} --> desativa usuario (active: false)
- Revise os relatorios antes de ativar
DESATIVAR = True - Teste primeiro com
DESATIVAR_APENAS_UM = Truepara validar com um unico usuario - Adicione usuarios criticos na lista
USERS_PROTEGIDOS - Nunca compartilhe o arquivo
.envpublicamente