Rechercher

Article
· Juil 31, 2024 2m de lecture

Arrêt gracieux d'IRIS sans accès au terminal : saveur *nix

Je me suis retrouvé dans la situation peu confortable de travailler avec un système Linux sur lequel quelqu'un avait accidentellement désactivé l'accès utilisateur au shell Linux. HealthConnect était en cours d'exécution, assurant la maintenance de centaines d'interfaces. Pour résoudre le problème d'accès, cependant, nous devions arrêter l'hôte pour l'application d'un correctif.

Sans le shell, la commande iris n'est pas disponible pour contrôler l'instance, nous étions donc confrontés au risque d'arrêter le serveur de manière inélégante. Nous voulions éviter cela si possible...

La routine ^SHUTDOWN était historiquement une option pour arrêter Caché, mais vous avez besoin d'une session de terminal pour l'exécuter (nous parlerons plus en détail de ce qui constitue une session de terminal dans une minute). Mais ^SHUTDOWN est désormais obsolète, et lorsque vous l'exécutez, vous obtenez le message "Veuillez utiliser la procédure 'iris stop' pour arrêter le système".

Alors rayez-la de la liste... et remplacez-la par INTNOSHUT^SHUTDOWN. Oui, l'exécution de cette commande arrêtera IRIS de manière élégante. Et oui, vous avez besoin d'un shell de commande IRIS pour l'exécuter. Alors, où pouvez-vous obtenir un shell de commande IRIS pour le système dont vous êtes exclu, demandez-vous ?

Dans le studio IRIS, qui n'existera plus très longtemps, bien sûr ! La fenêtre de sortie vous permet d'exécuter des commandes IRIS, et cela ne surprendra pas grand monde. Elle vous permettra certainement d'exécuter D INTNOSHUT^SHUTDOWN dans la fenêtre d'output (après avoir basculé vers l'espace de noms %SYS). Cependant, si vous faites exactement cela, IRIS commencera très probablement à s'arrêter puis à se bloquer, car Studio garde une session ouverte. Il se peut qu'il ne s'arrête jamais complètement, et vous n'auriez aucun moyen de le forcer à s'arrêter autrement qu'en arrêtant le système d'exploitation.

Cela dit, vous pouvez obtenir un arrêt complet en utilisant la commande JOB INTNOSHUT^SHUTDOWN, puis en quittant immédiatement Studio. IRIS s'arrêtera (plus probablement qu'improbable) en douceur et vous pourrez vous sentir mieux en faisant les choses de la "bonne" manière... même si cela semble faux.

En ce qui concerne la récupération de l'accès utilisateur au shell Linux, c'est un sujet pour un autre forum. Mais maintenant qu'IRIS est arrêté en toute sécurité, le problème d'accès peut être résolu (un certain démontage est probablement nécessaire).

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Juil 30, 2024 3m de lecture

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.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Juil 30, 2024 3m de lecture

第九章 使用进程私有全局变量来支持非常大的消息

第九章 使用进程私有全局变量来支持非常大的消息

使用进程私有全局变量来支持非常大的消息

默认情况下、 Web 服务在解析请求或响应时通常使用本地数组内存。可以强制它改用进程私有全局变量;这使 Web 服务能够处理非常大的消息。

为此,请指定 Web 服务类的 USEPPGHANDLER 参数,如下所示:

Parameter USEPPGHANDLER = 1;

如果此参数为 1,则 Web 服务在解析请求或响应时始终使用进程私有全局变量。如果此参数为 0,则 Web 服务始终使用本地数组内存来实现这些目的。如果未设置此参数,则 Web 服务使用默认值,通常是本地数组内存。

自定义 Web 服务的回调

可以通过覆盖其回调方法来定制 Web 服务的行为:

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· Juil 30, 2024

disk provisioning in a SSD environment

Hi we are migrating to Linux from OpenVMS. which includes a new server and SAN. after reading a prior post about the differences with ESX and a VSAN I would think that the a SAN with Virtual disks all SSD type would be similar. which after reading it makes me think that using thick provisioning is the way to go. the 3rd party vendor is arguing this point with me.  is it the same premise?  is non-dedupe the way to go with thick provisioning.  we are currently on 2015.2 of Cache with the plans to go to 2018 until the app vendor is able to certify their product on the latest versin.

thanks

Paul

 

VMware vStorage APIs for Array Integration (VAAI)

For the best storage performance, customers should consider using VAAI-capable storage hardware. VAAI can improve the performance in several areas including virtual machine provisioning and of thin-provisioned virtual disks. VAAI may be available as a firmware update from the array vendor for older arrays.

Virtual Disk Types

ESXi supports multiple virtual disk types:

Thick Provisioned – where space is allocated at creation. There are further types:

  • Eager Zeroed – writes 0’s to the entire drive. This increases the time it takes to create the disk, but results in the best performance, even on the first write to each block.
  • Lazy Zeroed – writes 0’s as each block is first written to. Lazy zero results in a shorter creation time, but reduced performance the first time a block is written to. Subsequent writes, however, have the same performance as on eager-zeroed thick disks.

Thin Provisioned – where space is allocated and zeroed upon write. There is a higher I/O cost (similar to that of lazy-zeroed thick disks) during the first write to an unwritten file block, but on subsequent writes thin-provisioned disks have the same performance as eager-zeroed thick disks

In all disk types VAAI can improve performance by offloading operations to the storage array. Some arrays also support thin provisioning at the array level, do not thin provision ESXi disks on thin provisioned array storage as there can be conflicts in provisioning and management.

1 Comment
Discussion (1)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· Juil 30, 2024

Extracting Resource from FHIR Bundle

Does anyone have an example of extracting the Resource from a FHIR Bundle?

{

"resourceType": "Bundle",

"type": "searchset",

"total": 5,

"link": [

{

"relation": "self",

"url": "https://hostname/instance/api/FHIR/R4/Practitioner?given=marty&family=seeger"

}

],

"entry": [

{

"link": [

{

"relation": "self",

"url": "https://hostname/instance/api/FHIR/R4/Practitioner/eUQwZHO1O.8KAThR14DRZO5EOxf.Fu6hu8pLE9e60Nh43"

}

],

"fullUrl": "https://hostname/instance/api/FHIR/R4/Practitioner/eUQwZHO1O.8KAThR14DRZO5EOxf.Fu6hu8pLE9e60Nh43",

"resource": {

"resourceType": "Practitioner",

"id": "eUQwZHO1O.8KAThR14DRZO5EOxf.Fu6hu8pLE9e60Nh43",

"identifier": [

{

"use": "usual",

"type": {

"text": "INTERNAL"

},

"value": " 10199005"

},

{

"use": "usual",

"type": {

"text": "EXTERNAL"....

 

 

I am working on a Proof of Concept to read data from our EMR FHIR Repository and was able to do it with a Response type of patient, but I am not sure how a Response Type of Bundle works.

Thanks

Scott

1 Comment
Discussion (1)2
Connectez-vous ou inscrivez-vous pour continuer