]> git.llucax.com Git - mecon/scripts.git/commitdiff
Se agregan los scripts para carga de novedades.
authorLeandro Lucarella <llucax@gmail.com>
Thu, 3 Apr 2003 18:23:34 +0000 (18:23 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 3 Apr 2003 18:23:34 +0000 (18:23 +0000)
18 files changed:
novedades/README [new file with mode: 0644]
novedades/backup [new file with mode: 0755]
novedades/carga [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/carga [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/scripts/10.borrar.codep [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/scripts/20.copiar.datos [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/scripts/40.codep [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/scripts/50.novedades [new file with mode: 0755]
novedades/cargas/intranet-db.mecon.ar/scripts/60.copiar.codep [new file with mode: 0755]
novedades/cargas/localhost/carga [new file with mode: 0755]
novedades/cargas/localhost/scripts/50.novedades [new file with mode: 0755]
novedades/cargas_de_datos/web019.parciales [new file with mode: 0755]
novedades/cargas_de_datos/webfer.feriados [new file with mode: 0755]
novedades/cargas_de_datos/webgen.estado [new file with mode: 0755]
novedades/copia [new file with mode: 0755]
novedades/corregir_lib.php [new file with mode: 0644]
novedades/run-sql-data-parts [new file with mode: 0755]
novedades/run-sql-parts [new file with mode: 0755]

diff --git a/novedades/README b/novedades/README
new file mode 100644 (file)
index 0000000..10ecdb6
--- /dev/null
@@ -0,0 +1,25 @@
+$Id$
+
+Carga de novedades en bases de datos de servidores de intranet.
+
+Directorio 'datos':
+    En este directorio se copian (previo ser procesados de ser necesario)
+    los archivos de datos a subir a las DB. El nombre del archivo debe
+    coincidir con el nombre de la tabla a donde va a ser subido y su
+    contenido debe ser un archivo con los campos separados por comas y las
+    filas separadas por '\n', siendo la primera fila una descripción que es
+    ignorada.
+Directorio 'cargas_de_datos':
+    En este directorio hay scripts que copian y/o procesan los archivos de
+    datos de su ubicación original al directorio 'datos' para que puedan
+    ser subidos a las DB correctamente.
+Directorio 'cargas':
+    Esta compuesto por subdirectorios, típicamente con la siguiente
+    estructura:
+        'carga':   Es un script que debe existir siempre que se quiera
+                   que este subdirectorio se procese automáticamente.
+        'scripts': Scripts que se ejecutan en la carga, a través de
+                   run-parts(8) por lo que sigue sus reglas.
+Directorio 'backups':
+    Aquí se deja un backup comprimido de cada carga diaria (antes de
+    procesar nada).
diff --git a/novedades/backup b/novedades/backup
new file mode 100755 (executable)
index 0000000..a9911a0
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Parámetros de la línea de comandos.
+home="$1"
+origen="$2"
+datos="$3"
+
+# Configuración.
+host="intranet-db.mecon.ar"
+dir="$home"/backups
+targz="$dir"/`date +%Y%m%d`.tar.gz
+
+# Script.
+echo "Haciendo backup en $targz"
+files=""
+for f in `ls "$datos"`; do
+    nombre=`basename "$f" | awk -F\\. '{ print $1 }'`
+    files="$files $nombre"
+done
+cd "$origen"
+tar -cvzf "$targz" $files
+scp -1 -r "$targz" novedades@"$host":"$dir"
diff --git a/novedades/carga b/novedades/carga
new file mode 100755 (executable)
index 0000000..0544a59
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Script para ejecutar todos los sql de un directorio.
+#
+# Creado por Leandro Lucarella (llucar) el mié ene 22 18:20:06 ART 2003
+#
+
+# Parámetros de la línea de comandos.
+home="/home/novedades/sql"
+datos="$home/datos"
+cargas="$home/cargas"
+log="$home/carga.log"
+origen="/home/novedades"
+
+# Script.
+echo >> "$log"
+echo "===================================================================" >> "$log"
+echo >> "$log"
+date >> "$log"
+echo >> "$log"
+echo "Hace un backup de los datos originales" >> "$log"
+"$home"/backup "$home" "$origen" "$home"/cargas_de_datos >> "$log" 2>&1
+echo >> "$log"
+echo "Comienza la carga de la base de datos" >> "$log"
+echo >> "$log"
+echo "Cargando y procesando archivos de datos..." >> "$log"
+run-parts --verbose --arg="$origen" --arg="$datos" --arg="$home" \
+    "$home/cargas_de_datos" >> "$log" 2>&1
+echo "Procesando '$cargas'..." >> "$log" 2>&1
+for dir in `ls "$cargas" | sort`; do
+    echo "- Cargando '$dir'..." >> "$log" 2>&1
+    "$cargas/$dir/carga" "$cargas/$dir" "$datos" >> "$log" 2>&1
+done
+echo >> "$log"
+echo >> "$log"
+echo "Fin de la carga!" >> "$log"
+date >> "$log"
diff --git a/novedades/cargas/intranet-db.mecon.ar/carga b/novedades/cargas/intranet-db.mecon.ar/carga
new file mode 100755 (executable)
index 0000000..69e7bb5
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Script para cargar bases de datos.
+#
+# Creado por Leandro Lucarella (llucar) el mié ene 22 17:57:00 ART 2003
+#
+
+# Configuración.
+home="$1"
+datos="$2"
+host="intranet-db"
+user="intranet"
+pass="intranet"
+db="novedades"
+
+# Script.
+/bin/run-parts \
+    --verbose \
+    --arg="$host" \
+    --arg="$user" \
+    --arg="$pass" \
+    --arg="$db" \
+    --arg="$home" \
+    --arg="$datos" \
+    "$home/scripts"
diff --git a/novedades/cargas/intranet-db.mecon.ar/scripts/10.borrar.codep b/novedades/cargas/intranet-db.mecon.ar/scripts/10.borrar.codep
new file mode 100755 (executable)
index 0000000..772b034
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+datos="$6"
+
+ssh -1 novedades@"$host" rm -vf "$datos"/codep
diff --git a/novedades/cargas/intranet-db.mecon.ar/scripts/20.copiar.datos b/novedades/cargas/intranet-db.mecon.ar/scripts/20.copiar.datos
new file mode 100755 (executable)
index 0000000..fe467c4
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+datos="$6"
+
+scp -1 -r "$datos"/* novedades@"$host":"$datos"
+#ssh -1 novedades@"$host" chmod -vR 664 "$datos"
diff --git a/novedades/cargas/intranet-db.mecon.ar/scripts/40.codep b/novedades/cargas/intranet-db.mecon.ar/scripts/40.codep
new file mode 100755 (executable)
index 0000000..d7be87a
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+#db="$4"
+db="CODEP"
+home="$5"
+datos="$6"
+
+cat <<EOT | mysql -h"$host" -u"$user" -p"$pass" "$db"
+SELECT
+    codigo_actual, nombre_breve
+INTO OUTFILE
+    '$datos/codep'
+FIELDS TERMINATED BY
+    ','
+LINES TERMINATED BY
+    '\n'
+FROM
+    Dependencias;
+EOT
diff --git a/novedades/cargas/intranet-db.mecon.ar/scripts/50.novedades b/novedades/cargas/intranet-db.mecon.ar/scripts/50.novedades
new file mode 100755 (executable)
index 0000000..4655d8f
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+datos="$6"
+
+"$home/../../run-sql-data-parts" "$host" "$user" "$pass" "$db" "$datos"
diff --git a/novedades/cargas/intranet-db.mecon.ar/scripts/60.copiar.codep b/novedades/cargas/intranet-db.mecon.ar/scripts/60.copiar.codep
new file mode 100755 (executable)
index 0000000..4150b8a
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+datos="$6"
+
+scp -1 -r novedades@"$host":"$datos"/codep "$datos"
diff --git a/novedades/cargas/localhost/carga b/novedades/cargas/localhost/carga
new file mode 100755 (executable)
index 0000000..b88ee3a
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Script para cargar bases de datos.
+#
+# Creado por Leandro Lucarella (llucar) el mié ene 22 17:57:00 ART 2003
+#
+
+# Configuración.
+home="$1"
+datos="$2"
+host="localhost"
+user="intranet"
+pass="intranet"
+db="novedades"
+
+# Script.
+/bin/run-parts \
+    --verbose \
+    --arg="$host" \
+    --arg="$user" \
+    --arg="$pass" \
+    --arg="$db" \
+    --arg="$home" \
+    --arg="$datos" \
+    "$home/scripts"
diff --git a/novedades/cargas/localhost/scripts/50.novedades b/novedades/cargas/localhost/scripts/50.novedades
new file mode 100755 (executable)
index 0000000..4655d8f
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+datos="$6"
+
+"$home/../../run-sql-data-parts" "$host" "$user" "$pass" "$db" "$datos"
diff --git a/novedades/cargas_de_datos/web019.parciales b/novedades/cargas_de_datos/web019.parciales
new file mode 100755 (executable)
index 0000000..271face
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/php4 -qC
+<?
+
+error_reporting( E_ALL );
+
+$origen  = isset( $argv[1] ) ? $argv[1] : '.';
+$destino = isset( $argv[2] ) ? $argv[2] : '.';
+$libdir  = isset( $argv[3] ) ? $argv[3] : getcwd();
+
+require_once "$libdir/corregir_lib.php";
+
+$fi = fopen( "$origen/web019", 'r' );
+$fo = fopen( "$destino/parciales", 'w' );
+$fe = fopen( 'php://stderr', 'w' );
+
+$s = fgets( $fi ); // Saca la descripción.
+fputs( $fo, "nrodoc,fecha,desde,hasta,novedad\n" );
+$c = 1;
+while ( ( $s = fgets( $fi ) ) !== false ) {
+    if ( preg_match( '/^(\d{10}),([^,]+),(\d{8}),([^,]*),([^,]*),$/', $s, $m ) ) {
+#    if ( preg_match( '/^(\d{10}),([^,]+),(\d{8}),([:\d]*),([:\d]*),$/', $s, $m ) ) {
+        list( $todo, $doc, $nov, $fecha, $desde, $hasta ) = $m;
+        $doc   = sacar_ceros( $doc );
+        $fecha = invertir_fecha( $fecha );
+        $desde = corregir_hora( $desde );
+        $hasta = corregir_hora( $hasta );
+        $nov   = strtolower( $nov );
+        fputs( $fo, "$doc,$fecha,$desde,$hasta,$nov\n" );
+    } else {
+        fputs( $fe, "ERROR: No se pudo interpretar la fila $c: $s.\n" );
+    }
+    $c++;
+}
+
+?>
diff --git a/novedades/cargas_de_datos/webfer.feriados b/novedades/cargas_de_datos/webfer.feriados
new file mode 100755 (executable)
index 0000000..6cbe951
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/php4 -qC
+<?php
+
+error_reporting(E_ALL);
+
+$origen  = isset( $argv[1] ) ? $argv[1] : '.';
+$destino = isset( $argv[2] ) ? $argv[2] : '.';
+$libdir  = isset( $argv[3] ) ? $argv[3] : getcwd();
+
+require_once "$libdir/corregir_lib.php";
+
+$fi = fopen( "$origen/webfer", 'r' );
+$fo = fopen( "$destino/feriados", 'w' );
+$fe = fopen( 'php://stderr', 'w' );
+
+$s = fgets( $fi ); // Saca la descripción.
+fputs( $fo, "fecha,desc,tipo,hora\n" );
+$c = 1;
+while ( ( $s = fgets( $fi ) ) !== false ) {
+    if ( preg_match( '/^(\d{8}),([^,]+),([^,]?),(\d{4}),$/', $s, $m ) ) {
+    #if ( preg_match( '/^(\d{10}),([^,]+),(\d{8}),([:\d]*),([:\d]*),$/', $s, $m ) ) {
+        list( $todo, $fecha, $desc, $tipo, $hora ) = $m;
+        $fecha = invertir_fecha( $fecha );
+        $hora  = corregir_hora( $hora );
+        $tipo  = corregir_feriado( $tipo );
+        $desc  = corregir_descripcion( $desc );
+        fputs( $fo, "$fecha,$desc,$tipo,$hora\n" );
+    } else {
+        fputs( $fe, "ERROR: No se pudo interpretar la fila $c: $s.\n" );
+    }
+    $c++;
+}
+
+?>
diff --git a/novedades/cargas_de_datos/webgen.estado b/novedades/cargas_de_datos/webgen.estado
new file mode 100755 (executable)
index 0000000..656e25e
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/php4 -qC
+<?
+
+error_reporting(E_ALL);
+
+$origen  = isset( $argv[1] ) ? $argv[1] : '.';
+$destino = isset( $argv[2] ) ? $argv[2] : '.';
+$libdir  = isset( $argv[3] ) ? $argv[3] : getcwd();
+
+require_once "$libdir/corregir_lib.php";
+
+$fi = fopen( "$origen/webgen", 'r' );
+$fo = fopen( "$destino/estado", 'w' );
+$fe = fopen( 'php://stderr', 'w' );
+
+$s = fgets( $fi ); // Saca la descripción.
+fputs( $fo, "nrodoc,dependencia,estado,funcion\n" );
+$c = 1;
+while ( ( $s = fgets( $fi ) ) !== false ) {
+    if ( preg_match( '/^(\d{10}),(SCA|SAS|CAS),(AD|CA|SG|SE|ME|MA|MY|PL),(\d{10}),$/', $s, $m ) ) {
+    #if ( preg_match( '/^(\d{10}),([^,]+),(\d{8}),([:\d]*),([:\d]*),$/', $s, $m ) ) {
+        list( $todo, $doc, $est, $func, $dep ) = $m;
+        $doc = sacar_ceros( $doc );
+        fputs( $fo, "$doc,$dep,$est,$func\n" );
+    } else {
+        fputs( $fe, "ERROR: No se pudo interpretar la fila $c: $s.\n" );
+    }
+    $c++;
+}
+
+?>
diff --git a/novedades/copia b/novedades/copia
new file mode 100755 (executable)
index 0000000..e288802
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Script para copiar un archivo deduciendo el nombre del nombre del propio
+# script.
+#
+# Creado por Leandro Lucarella (llucar) el jue ene 23 17:22:03 ART 2003
+#
+
+# Parámetros de la línea de comandos.
+origen="$1"
+destino="$2"
+libdir="$3"
+
+# Script.
+nombre_orig=`basename "$0" | awk -F\\. '{ print $1 }'`
+nombre_nuevo=`basename "$0" | awk -F\\. '{ print $2 }'`
+if [ -z "$nombre_orig" ]; then
+    nombre_nuevo=`basename "$0"`
+fi
+cp -fv "$origen/$nombre_orig" "$destino/$nombre_nuevo"
diff --git a/novedades/corregir_lib.php b/novedades/corregir_lib.php
new file mode 100644 (file)
index 0000000..0db5541
--- /dev/null
@@ -0,0 +1,37 @@
+<?
+
+// Le saca los ceros (y otros posibles caracteres).
+function sacar_ceros($doc) {
+    return intval($doc);
+}
+
+// Invierte la fecha para que pueda ser interpretada por MySQL.
+function invertir_fecha($fecha) {
+    return preg_replace('/(\d{2})(\d{2})(\d{4})/', '\3\2\1', $fecha);
+}
+
+// Corrige las horas.
+function corregir_hora($hora) {
+    preg_match('/([^:]{0,2})(:?)([^:]{0,2})/', $hora, $m);
+    return sprintf('%02d:%02d', sacar_ceros($m[1]), sacar_ceros($m[3]));
+}
+
+// Corrige el tipo de feriado.
+function corregir_feriado($tipo) {
+    switch ($tipo) {
+        case 'N':
+            return 'no laborable';
+        case 'A':
+            return 'asueto';
+        case 'F':
+        default:
+            return 'feriado';
+    }
+}
+
+// Corrige la descripción.
+function corregir_descripcion($desc) {
+    return strtr($desc, '#', 'Ñ');
+}
+
+?>
diff --git a/novedades/run-sql-data-parts b/novedades/run-sql-data-parts
new file mode 100755 (executable)
index 0000000..f342c50
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# Script para ejecutar todos los sql de un directorio.
+#
+# Creado por Leandro Lucarella (llucar) el mié ene 22 18:20:06 ART 2003
+#
+
+# Parámetros de la línea de comandos.
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+
+# Script.
+echo "Procesando '$home'..."
+for file in `ls "$home"`; do
+    echo "- Cargando '$file'..."
+    cat <<EOT | mysql -h"$host" -u"$user" -p"$pass" "$db"
+        delete from $file;
+        load data infile '$home/$file' 
+            replace into table $file
+            fields terminated by ',' 
+            lines terminated by '\n' 
+            ignore 1 lines;
+EOT
+done
diff --git a/novedades/run-sql-parts b/novedades/run-sql-parts
new file mode 100755 (executable)
index 0000000..38e00c9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Script para ejecutar todos los sql de un directorio.
+#
+# Creado por Leandro Lucarella (llucar) el mié ene 22 18:20:06 ART 2003
+#
+
+# Parámetros de la línea de comandos.
+host="$1"
+user="$2"
+pass="$3"
+db="$4"
+home="$5"
+
+# Script.
+echo "Procesando '$home'..."
+for sql in `ls "$home"/*.sql | sort`; do
+    echo "- Ejecutando '$sql'..."
+    mysql -h"$host" -u"$user" -p"$pass" "$db" < "$sql"
+done