django-hospitalization-core 1.1.6
Modulo core hospitalization
License: MIT
Keywords: django

Django Hospitalization Core
=====

Requerimentos
-----------
django >= 2.2

djangorestframework >= 3.12.2

opencensus-ext-azure >= 1.1.4

opencensus-ext-django >= 0.7.6

djangorestframework-camel-case >= 1.3.0

Guia rápido de instalação
-----------

1. Instale o módulo utilizando o pip

```python
pip install django-hospitalization-core==1.0.0
```

2. Adicione "hospitalization_core" em INSTALLED_APPS

```python
INSTALLED_APPS = [
    ...
    'hospitalization_core',
]
```

3. Incluir o middleware

```python
MIDDLEWARE = [
    ...,
    'opencensus.ext.django.middleware.OpencensusMiddleware',
    'hospitalization_core.middlewares.response_middleware.ResponseMiddleware'
]
```

4. Ajustar o arquivo settings.py inserindo logs da aplicação

```python
APPLICATIONINSIGHTS_CONNECTION_STRING = config('API_KEY_APP_INSIGHTS')

LOGGING = {
    'version': 1,
    "handlers": {
        "azure": {
            "level": config('DEBUG_LEVEL', default='ERROR'),
        "class": "opencensus.ext.azure.log_exporter.AzureLogHandler",
            "connection_string": APPLICATIONINSIGHTS_CONNECTION_STRING,
        },
        "console": {
            "level": config('DEBUG_LEVEL', default='ERROR'),
            "class": "logging.StreamHandler",
            "stream": sys.stdout,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'azure'],
            'propagate': True,
        },
        'django.request': {
            'handlers': ['console', 'azure'],
            'level': config('DEBUG_LEVEL', default='ERROR'),
            'propagate': True,
        },
    }
}

OPENCENSUS = {
    'TRACE': {
        'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)',
        'EXPORTER': "opencensus.ext.azure.trace_exporter.AzureExporter(connection_string='"
        + APPLICATIONINSIGHTS_CONNECTION_STRING + "')",
    }
}
```

5. No arquivo de variável de ambiente adicionar a variável 'API_KEY_APP_INSIGHTS' e 'DEBUG_LEVEL'

Caso de erro opencensus em user.pk
-----------

Trocar o middleware 

```python
'opencensus.ext.django.middleware.OpencensusMiddleware'
```

por

```python
'hospitalization_core.middlewares.opencensus_middleware.OpencensusMiddlewareHapUser'
```

no fim temos

```python
MIDDLEWARE = [
    ...,
    'hospitalization_core.middlewares.opencensus_middleware.OpencensusMiddlewareHapUser',
    'hospitalization_core.middlewares.response_middleware.ResponseMiddleware'
]
```

Camelizando as response dentro do content
-----------

Por padrão python trabalha em snake_case, então em sua response padrão temos o seguinte cenário

```json
{
    "notifications": "....",
    "traceId": ".....",
    "timestamp": ".....",
    "content": [
        {
            "codigo": "....",
            "nome": "....",
            "codigo_filial": "....",
            "codigo_alocacao": ....
        }
    ]
}
```

Adicionar a configuração no arquivo settings.py

```python
CAMELIZE_RESPONSE = True
```

Teremos como retorno

```json
{
    "notifications": "....",
    "traceId": ".....",
    "timestamp": ".....",
    "content": [
        {
            "codigo": "....",
            "nome": "....",
            "codigoFilial": "....",
            "codigoAlocacao": ....
        }
    ]
}
```

Parametrizando banco de dados
-----------

1. Adicionar o middleware

```python
MIDDLEWARE = [
    ...,
    'hospitalization_core.middlewares.datasource_middleware.DataSourceMiddleware'
]
```

2. Adicionar a router no settings.py

```python
DATABASE_ROUTERS = [
    "hospitalization_core.db.db_routers.DataSourceRouter",
]
```

3. No settings.py informar qual será o banco padrão
```python
DB_DEFAULT = 'nome do db'
```

caso não seja informado, ele irá sempre usar o bando 'default' como padrão

4. Para informar qual banco de dados o usuário queira utilizar mandar no header da request

```json
data-source: 'nome do db'
```

Adicionando Nome na aplicação do application insights
-----------

1. Adicionar a variável APPLICATION_NAME

```python
APPLICATION_NAME=Nome_da_aplicacao
```

2. Arquivo settings.py adicionar a variável APPLICATION_NAME

```python
APPLICATION_NAME = config('APPLICATION_NAME', default='Python Manager')
```

3. Importar o modulo de tracer

```python
from hospitalization_core.ext.exporter_processor import exporter
```

4. Ajustar a configuração OPENCENSUS

```python
OPENCENSUS = {
    'TRACE': {
        'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)',
        'EXPORTER': exporter(),
    }
}
```

5. Ajustar o LOGGING

```python
LOGGING = {
    'version': 1,
    "handlers": {
        "azure": {
            "level": config('DEBUG_LEVEL', default='ERROR'),
            "class": 'hospitalization_core.ext.logger_handler.AzureLogHandler',
            "connection_string": APPLICATIONINSIGHTS_CONNECTION_STRING,
        },
        "console": {
            "level": config('DEBUG_LEVEL', default='ERROR'),
            "class": "logging.StreamHandler",
            "stream": sys.stdout,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'azure'],
            'propagate': True,
        },
        'django.request': {
            'handlers': ['console', 'azure'],
            'level': config('DEBUG_LEVEL', default='ERROR'),
            'propagate': True,
        },
    }
}
```