[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Fichero de gasto para pppcost



Hola a todos,

recientemente he instalado pppcost para que monitoree el gasto telefónico en
mis conexiones vía módem a Internet pero el fichero ~./pppcosts no refleja
nada coherente, después de tres conexiónes de menos de 20 minutos cada una,
este es su contenido:

[vigu@akela]# cat .pppcosts 
3324
25

¿Hay que ponerle alguna opción a pppcosts para que vuelque información a
~./pppcosts?, ¿qué significa lo contiene mi ~/.pppcosts?.

Por cierto, cuando conecto mediante wmppp, y tengo previamente lanzado
pppcosts, este último detecta bien cuando se produce la conexión pero el
tiempo de conexión comienza con 30 segundos, igual estoy preguntando una
idiotez porque es así como factura Telfónica pero, ¿por qué sucede esto?.

Ya por último, alguien ha actualizado a mano el fichero "es-costs.c" con las
tarifas actuales, por favor si esí que me lo mande pues no se de donde sacar
todos los parámetros necesarios para actualizarlo yo.

Si alguien conoce algún método mejor para vigilar el gasto telefónico, le
agradecería que me lo contase, Xose Manoel me mandó el script que adjunto 
pero al intentar ejecutarlo me sucede lo siguiente:

[vigu@akela]# coste_infovia 
awk: ./coste_infovia: line 87: syntax error at or near pasos
awk: ./coste_infovia: line 104: syntax error at or near *
awk: ./coste_infovia: line 108: syntax error at or near duracion
awk: ./coste_infovia: line 152: runaway regular expression /tarifa[tip ...

Saludos y gracias.
-- 

Javier Viñuales Gutiérrez 
vigu@ctv.es

#!/usr/bin/awk -f

BEGIN {
   ###################################################################
   #   Definici¢n de variables necesarias para el programa           #
   ###################################################################

# no podemos sacar el año del log 
# por tanto tenemos que definirlo aquí
ano=1997
# a donde hacemos la llamada
id="infovía"
# tarifa aplicable
tipo ="local"

# Coste del paso y iva aplicable

iva = 0.16
coste = 5.7

# Datos para cada tipo de tarifa (duraci¢n del paso y pasos iniciales)

pasos_iniciales["local"]=1
pasos_iniciales["provincial"]=2
pasos_iniciales["nacional"]=3

tarifa["local,reducida"]=240
tarifa["local,normal"]=180
tarifa["local,punta"]=180

tarifa["provincial,reducida"]=46
tarifa["provincial,normal"]=22.9
tarifa["provincial,punta"]=20

tarifa["nacional,reducida"]=20
tarifa["nacional,normal"]=10.7
tarifa["nacional,punta"]=7.2

}

# comienzo conexión

/Comienzo Conexión/ {
              split($3,x,":")
              hora=x[1]
              minuto=x[2]
              }
              
# final conexión

/Fin Conexión/ {
              split($3,x,":")
	      duracion_v = duracion(hora, minuto, x[1], x[2])
	      duracion_minutos=duracion_v / 60  
              dia_semana_v=int(index("NulMonTueWenThuFriSatSun",$1)/3)     
	      pasos_v=pasos(dia_semana_v,hora,duracion_v,tipo)
              printf " Día %6s Hora %6s Llamada a %10s   %5d min:  %3d pasos %-5.6g ptas\n"\
              ,$3,$2,id,duracion_minutos\
              ,pasos_v,pesetas(pasos_v) 
	      }	


   ##################################################################
   #  Funciones necesarias para el funcionamiento del programa      #
   ##################################################################

   ##################################################################
   #  devuelve la duración en segundos dandole hora de inicio y     #
   #  fin de algun suceso                                           #
   #                                                                #
   #  uso:                                                          #
   #                                                                #
   #    duracion(hora_ini, minuto_ini, hora_fin, minuto_fin)        #
   #                                                                #
   #   hora_ini, minuto_ini   hora y minuto del comenzo             #
   #   hora_fin, minuto_fin   hora y minuto del final               #
   #                                                                #
   ##################################################################
function duracion(hora_ini, minuto_ini, hora_fin, minuto_fin,     horas, minutos) {
              if ( hora_ini > hora_fin ) { horas = 24-hora_ini + hora_fin }
              else { horas = hora_fin - hora_ini }
              if ( minuto_ini > minuto_fin ) { minutos = (60-minuto_ini)+minuto_fin ;  
                                              horas = horas -1 }
              else { minutos = minuto_fin - minuto_ini }
              return horas*60*60+minutos*60
              }
function pesetas(pasos){
   ###################################################################
   #     devuelve el coste en pesetas de un n£mero de pasos          #
   #                                                                 #
   #    uso:                                                         #
   #                                                                 #
   #      pesetas(pasos)                                             #
   #                                                                 #
   #         pasos - un n£mero entero indicando el n£mero            #
   #                 de pasos consumidos                             #
   #                                                                 #
   #    necesita las variables:                                      #
   #                                                                 #
   #      coste - coste en pesetas de cada paso                      #
   #      iva   - iva en tanto por 1 (0.16)                          #
   #                                                                 #
   ###################################################################
     return ( pasos * coste * (1+iva) )
     }
    

function pasos(dia_semana,hora,duracion,tipo,  tmp,pasos_v) {
   ###################################################################
   #     devuelve el n£mero de pasos consumidos en la llamada        #
   #                                                                 #
   #  uso:                                                           #
   #                                                                 #
   #    pasos(dia_semana, hora, duracion, tipo)                      #
   #                                                                 #
   #      dia_semana: 0,1,2,3,4,6 (Lunes,Martes,....)                #
   #            hora: 9,20,0,14   (en formato 24 horas)              #
   #        duracion: 3612        (en segundos)                      #
   #            tipo: "local", "provincial", "nacional"              #
   #                                                                 #
   #   Adem s deben existir los arrays:                              #
   #                                                                 #
   #    pasos_iniciales["tipo"] (pasos inciales que cobra la CNTE)   #
   #    tarifa["tipo,tarifa"]   (duraci¢n del paso para cada horario)#
   #                                                                 #
   ###################################################################
      # Primero asignamos el tipo de tarifa
      ############################################
      # convertimos los par metros a n£meros
      dia_semana=dia_semana+0
      hora=hora+0
      # si es domingo toda la tarifa es reducida
      if (dia_semana == 6) {tmp="reducida"}
      # si es s bado
      else if (dia_semana == 5) {
             # entre 8 y 14 horas tarifa punta 
             if (hora < 14 && hora >= 8 ) {tmp="punta"}
             # si no reducida
             else           {tmp="reducida"}
             }
      # para el resto de los d¡as de la semana
      else { 
             # entre 8 y 17 horas tarifa punta
             if (hora < 17 && hora >= 8) {tmp="punta"}
             # entre 17 y 22 horas tarifa normal
             else if (hora >= 17 && hora < 22)  {tmp="normal"}
             # en el resto del horario, tarifa reducida   
             else {tmp="reducida"}
           } 
      # Ahora vamos a calcular los pasos transcurridos
      ################################################
      pasos_v=int(duracion/tarifa[tipo","tmp])
      if (duracion%tarifa[tipo","tmp] > 0) {pasos_v++}
      pasos_v=pasos_v+pasos_iniciales[tipo]
      return pasos_v
      }

function bisiesto(ano) {
  ###################################################################
  #   utilizaci¢n:                                                  #
  #                                                                 #
  #        bisiesto (a¤o)                                           #
  #                                                                 #
  #         a¤o (en formato de cuatro cifras, eg: 1997)             #
  #                                                                 #
  #   devuelve:                                                     #
  #                                                                 #
  #         0 - no es bisiesto                                      #
  #         1 - es bisiesto                                         #
  #                                                                 #
  ###################################################################

      return (ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0)
      # es bisiesto si es divisible por 4 y no por 100
      # o es divisible por 400
      }

function dia_semana(dia, mes, ano,  ndias,i) {
    #################################################################
    # devuelve el d¡a de la semana que era en una fecha determinada #
    # (s¢lo funciona con fechas mayores a 1970 y incluso m s all    #
    # del 200)                                                      #
    #                                                               #
    # utilizaci¢n:                                                  #
    #                                                               #
    #     dia_semana(dia,mes,a¤o)                                   #
    #       dia (1-31)                                              #
    #       mes (1-12)                                              #
    #       a¤o (1970-?)                                            #
    #                                                               #
    # devuelve:                                                     #
    #                                                               #
    #      un n£mero que quiere decir:                              #
    #                                                               #
    #         0 - Lunes                                             #
    #         1 - Martes                                            #
    #         2 - Miercoles                                         #
    #         3 - Jueves                                            #
    #         4 - Viernes                                           #
    #         5 - Sabado                                            #
    #         6 - Domingo                                           #
    #################################################################

    # contamos n£mero de d¡as que pasaron desde 1970
    ndias = 0
    # primero los a¤os
    for (i=1970; i <= ano -1 ; i++){
         if (bisiesto(i)==1)   { ndias = ndias + (366 % 7)}
                            else { ndias = ndias + (365 % 7)}
         }
    # luego los meses
    for (i=1; i <= mes -1 ; i++)  {
            if (i==4||i==6||i==9||i==11) { ndias = ndias + 30 }
            else if (i==2)               { ndias = ndias + 28 }
            else                         { ndias = ndias + 31 }
        }
    # si ese a¤o es bisiesto y estamos luego de febrero
    # hay que sumar un d¡a
    if (bisiesto(ano) == 1) {
          if      (mes> 2)      { ndias = ndias +1 }
          }
    # ahora sumamos los d¡as del mes
    ndias = ndias + (dia - 1)
    # el 1/1/1970 era jueves. por tanto
    return (ndias + 3) % 7
    }



Reply to: