{"id":20150,"date":"2023-01-12T20:52:16","date_gmt":"2023-01-12T18:52:16","guid":{"rendered":"https:\/\/changlonet.com\/blog\/?p=20150"},"modified":"2023-01-21T20:27:45","modified_gmt":"2023-01-21T18:27:45","slug":"el-programa-fallaba-por-la-noche","status":"publish","type":"post","link":"https:\/\/changlonet.com\/blog\/el-programa-fallaba-por-la-noche\/","title":{"rendered":"El programa fallaba por la noche"},"content":{"rendered":"<p>A principios del a\u00f1o pasado montamos una ampliaci\u00f3n a un programa a medida que ten\u00eda un cliente nuestro. Es un programa que nos gusta y que lleva sobreviviendo muchos a\u00f1os a los intentos de eliminarlo. Hace dos a\u00f1os parec\u00eda que morir\u00eda. La empresa que es cliente nuestro est\u00e1 creciendo mucho. Y al final para comunicarse con sus proveedores tuvieron que comprar acceso a una aplicaci\u00f3n Web.<\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" src=\"https:\/\/changlonet.com\/blog\/wp-content\/uploads\/2023\/01\/011223_1852_Elprogramaf1.png\" alt=\"\" title=\"\"><\/p>\n<p>Al final la usabilidad de la aplicaci\u00f3n Web es mucho peor que la de la aplicaci\u00f3n a medida. La soluci\u00f3n fue conectarse a la Api de la web y traernos los datos a la aplicaci\u00f3n en local. Bueno a lo que iba. Este m\u00f3dulo estaba funcionando sin problemas desde hace casi un a\u00f1o. Como en su momento el cliente ten\u00eda prisa en usarlo, le pasamos el m\u00f3dulo de conexi\u00f3n operativo pero faltando algunas prestaciones no imprescindibles.<\/p>\n<p>Nada m\u00e1s comenzar el a\u00f1o nos llaman con un error en la conexi\u00f3n a la Api del programa. Hab\u00edan comprado un par de empresas nuevas y las hab\u00edan integrado en su gesti\u00f3n. Y el d\u00eda 1 esas empresas ya les derivaban las tareas en la aplicaci\u00f3n Web de conexi\u00f3n con los proveedores. Nos damos cuenta que hay un error en los c\u00f3digos de esas empresas en la Api. No usan los mismos que el resto de las empresas del grupo. Se lo comentamos al cliente y los cambia. Y que est\u00e1bamos all\u00ed, le instalamos una versi\u00f3n m\u00e1s moderna del m\u00f3dulo de conexi\u00f3n. Una de las novedades era un sistema de avisos para detectar justo errores como el que les hab\u00eda sucedido. Si llegaban datos desde la Web con un formato desconocido el m\u00f3dulo env\u00eda un aviso al supervisor para que \u00e9ste revise y compruebe si hay errores en los datos de la Web, en el programa local o es alg\u00fan nuevo proveedor o cliente no dado de alta bien.<\/p>\n<p>Al cliente le gusta el sistema. Lo que hace es que abre una peque\u00f1a ventana indicando el error y permit\u00eda copiarlo para revisarlo luego. Si se aceptaba guardaba los datos dejando el campo desconocido con un Sin especificar en origen. Le explicamos a los supervisores c\u00f3mo funciona y lo ven \u00fatil, ya que ven en tiempo real los errores. Adem\u00e1s estos d\u00edas con las dos empresas con nuevos empleados accediendo al sistema hay m\u00e1s errores de lo normal.<\/p>\n<p>Dos d\u00edas despu\u00e9s nos llaman otra vez. El m\u00f3dulo de conexi\u00f3n a la Api est\u00e1 ca\u00eddo. En la tienda tenemos un PC configurado con m\u00e1quinas virtuales simulando el entorno de trabajo de este cliente. Lo arrancamos y ejecutamos la aplicaci\u00f3n. Vemos que hay un par de datos mal grabados en la aplicaci\u00f3n Web. Se lo decimos. Los arreglan, reinician la aplicaci\u00f3n y vuelve a funcionar. Por si acaso activamos el log de debug en el programa en real.<\/p>\n<p>Al d\u00eda siguiente otra llamada igual. Nos damos cuenta de que el error es siempre a primera hora de la ma\u00f1ana. Vemos por el log que hay un problema con uno de los ficheros de la base de datos. Revisamos la rutina de conexi\u00f3n a la base de datos. Est\u00e1 bien, funciona sin problema. Al final ya en las Oficinas del cliente vemos que en el servidor hay dos instancias del m\u00f3dulo de comunicaciones de la primera versi\u00f3n todav\u00eda abiertas. Pensamos que el error puede estar ah\u00ed y reiniciamos el servidor. Todo vuelve a funcionar bien.<\/p>\n<p>Pasa otro d\u00eda y nos vuelven a llamar a primera hora. M\u00f3dulo de comunicaciones ca\u00eddo\u2026 probamos nosotros en la tienda y todo va bien. Vamos a la Oficina del cliente. Y vemos que el error ha vuelto a salir de madrugada (el cliente tiene un negocio donde trabajan las 24 horas del d\u00eda 7 d\u00edas a la semana por turnos). Y entonces les decimos que nos avisen cuando los empleados del turno de noche vayan a trabajar. Cuando nos avisan vamos a la Oficina\u2026 y entonces descubrimos el problema. En el turno de noche hay veces que el supervisor hace de empleado normal. Pero se logea como supervisor en un PC del despacho pero luego sale a la sala com\u00fan y trabaja desde all\u00ed logeado como empleado normal. Lo que suced\u00eda es que no ve\u00eda los avisos de errores que aparec\u00edan en su sesi\u00f3n de supervisor. Si aparec\u00eda un error y no se subsanaba segu\u00edan saliendo m\u00e1s ventanas de error\u2026 al final tantas ventanas bloqueaban al resto del m\u00f3dulo de comunicaciones.<\/p>\n<p>La soluci\u00f3n fue simple, pusimos un control para activar o desactivar los avisos. Ahora en el turno de noche los desactivan y ya no hay m\u00e1s problemas.<\/p>\n<p>Como de costumbre ya puedes hacer pruebas y controles, simular el entorno de trabajo del cliente\u2026 al final lo que a los jefes y a nosotros nos pareci\u00f3 una buena idea el d\u00eda a d\u00eda de los empleados nos demostr\u00f3 nuestro error.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A principios del a\u00f1o pasado montamos una ampliaci\u00f3n a un programa a medida que ten\u00eda un cliente nuestro. Es un programa que nos gusta y que lleva sobreviviendo muchos a\u00f1os a los intentos de eliminarlo. Hace dos a\u00f1os parec\u00eda que morir\u00eda. La empresa que es cliente nuestro est\u00e1 creciendo mucho. Y al final para comunicarse [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":20149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[3,13],"tags":[447,4298,4299],"class_list":["post-20150","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-clientes","category-software","tag-bugs","tag-programas-a-medida","tag-usuarios"],"_links":{"self":[{"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/posts\/20150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/comments?post=20150"}],"version-history":[{"count":0,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/posts\/20150\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/media\/20149"}],"wp:attachment":[{"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/media?parent=20150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/categories?post=20150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/changlonet.com\/blog\/wp-json\/wp\/v2\/tags?post=20150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}