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:
[EMAIL PROTECTED] 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:
[EMAIL PROTECTED] 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
[EMAIL PROTECTED]
#!/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
}