Artigo
· Jul. 30, 2024 3min de leitura

Previnindo o crescimento da base HSAUDIT

Introdução

Talvez você já tenha reparado que a base HSAUDIT não tem uma tarefa de expurgo já configurada na maioria das versões do HealthShare, e isso pode ser um problema já que ela tem mapeamentos de globais em vários namespaces.

Se você notou que essa base está ocupando muito espaço em disco e está com dificuldades de limpá-la, esse artigo é para você.

Se você já tem uma ideia de como fazer isso, mas está utilizando uma versão mais antiga do HealthShare, onde a tarefa não existe pronta, ou o PurgeByDaysToKeep não existe, esse artigo também é para você.

 

Passo a passo

Criar a classe de tarefa

Crie uma classe de expurgo que estende de %SYS.Task.Definition no namespace %SYS. Eu usei o nome custom.Task.Purge.ExpurgoHSAUDIT. Defina o parâmetro TaskName como uma string com o nome da tarefa e a propriedade KeepDays como a quantidade de dias para manter. Defina o método OnTask(). 

Class custom.Task.Purge.ExpurgoHSAUDIT Extends %SYS.Task.Definition
{

Parameter TaskName = "PurgeHSAUDIT";

Property KeepDays As %Integer;

Method OnTask() As %Status
{}
}

Dentro do método, vamos mudar de namespace para onde as globais de HSAUDIT estejam mapeadas e queremos expurgar. Vamos definir a data a de << KeepDays >> dias atrás e expurgar os dados como veremos a seguir.

A HSAUDIT é gerida pelo pacote  HS_IHE_ATNA_Repository, onde vamos encontrar algumas classes e métodos úteis para o expurgo. Primeiro, verificamos em HS.IHE.ATNA.Repository.Exclusion se os dados estão OK para expurgo com o método OKToPurge(). Depois, selecionamos os dados para expurgo na tabela HS_IHE_ATNA_Repository.Aggregation e deletamos com o método PurgeEvent() da classe Exclusion referida acima.

Method OnTask() As %Status
{
    Set tStatus = $$$OK
	Set tDate = $ZDATETIME($PIECE($HOROLOG, ",", 1)-..KeepDays,3)
	
	Do $ZUTIL(5,"NamespaceEDGE")
	
	If '##class(HS.IHE.ATNA.Repository.Exclusion).OKToPurge()
	{
		Set tStatus = $System.Status.Error(5001, "HS.IHE.ATNA.Repository.Exclusion returned NOT OK TO PURGE")
		Quit tStatus
	}
	
	Set tSQL="Select ID from HS_IHE_ATNA_Repository.Aggregation where IndexedDate < ?"
	SET tStatement = ##class(%SQL.Statement).%New()
	Set tStatus=tStatement.%Prepare(tSQL)
	
	If $System.Status.IsError(tStatus) Quit
	
	Set tResultSet=tStatement.%Execute(pDate)

	While tResultSet.%Next()
	{
		Set tId=tResultSet.%Get("ID")
		
		Do ##class(HS.IHE.ATNA.Repository.Exclusion).PurgeEvent(tId)
	}
	
	Quit tStatus
}
}

 

Por fim, retornamos um status. Você pode configurar esse mesmo método para repetir o código para todos os namespaces, ou definir o namespace como propriedade e configurar várias tarefas para cada namespace no próximo passo.

 

Configurar a tarefa

Abra o Portal de Administração da instância. Vá para Operação do Sistema > Gerenciador de Tarefas > Nova tarefa. Escolha a tarefa de nome definido no parâmetro TaskName no passo anterior. Escolha o namespace %SYS e a quantidade de dias a manter no parâmetro KeepDays. Escolha um usuário com acesso ao namespace %SYS e aos outros acessados na tarefa.
Selecione Avançar e defina a frequência de execução da tarefa.

 

Cuidado

Ao configurar essa tarefa no seu Edge, pode haver uma perda irrecuperável ao apagar os dados de auditoria. Leia com atenção a documentação antes de executá-la, em especial o aviso no link.

Discussão (0)1
Entre ou crie uma conta para continuar