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: