#!/usr/bin/env ruby
#
# escalabilidad_capacityPlanning_cantidadDatos.rb
#
# Creado por Daniel Moros y Yannixia Castellanos
# Proyecto de Grado
# Tutor Kenyer Dominguez
# Ultima Fecha Modificacion: Marzo de 2010
#
# Script que permite el ingreso de un conjunto de par'ametros referentes a
# funciones de estimaci'on y devuelve la ejecuci'on de la funci'on de
# medici'on de la Escalabilidad y el Capacity Planning.
# Produce c'odigo LaTEX que puede ser copiado directamente con la informaci'on
# relevante, as'i como la sustituci'on por pasos de las f'ormulas.
#
# Par'ametros de entrada:
# Constante de demanda: Constante de una recta que estima el crecimiento de la
# demanda.
# Pendiente de demanda: Pendiente de la recta que estima el crecimiento de la
# demanda.
# Constante de capacidad: Constante de una recta que estima el tiempo
# que tomar'a una transacci'on para una cantidad de datos
# dada.
# Pendiente de capacidad: Pendiente de una recta que estima el tiempo
# que tomar'a una transacci'on para una cantidad de datos
# dada.
# N'umero de a~nos: Cantidad de a~nos futuros, en los que se quiere hacer la
# verificaci'on de la escalabilidad.
# A~no actual: A~no actual. En el que si se evalua la funci'on de demanda
# dar'ia un valor cercano a la demanda actual real.
# f
# Funci'on que evalua una la recta con constante c, pendiente m en el punto x.
def f(c,m,x)
demanda= (c+m*x)
puts " Para el a~no "+x.to_s+" el sistema tendr'a una demanda de" +\
" aproximadamente "+ demanda.to_s+ " registros."
return demanda
end
begin
# print(ARGV[0])
if(ARGV.length!=6)
puts(" Para ejecutar debe hacer:")
puts(" "+$0+" <constante_de_demanda> <pendiente_de_demanda> "+ \
"<constante_de_capacidad> <pendiente_de_capacidad> <anios a evaluar>"+\
"<anio actual>")
exit()
end
constante_de_demanda=Float(ARGV[0])
pendiente_de_demanda=Float(ARGV[1])
constante_de_capacidad=Float(ARGV[2])
pendiente_de_capacidad=Float(ARGV[3])
req_de_calidad=1300 # ms.Depende del QoS que se tenga para el sistema.
capacidad_actual=Integer((1300-constante_de_capacidad)/pendiente_de_capacidad)
anios_escalar=Integer(ARGV[4])
anio_actual=Integer(ARGV[5])
puts(" Se estima que bajo esta configuraci'on el sistema podr'a responder" +\
" en tiempo promedio inferior a " + req_de_calidad.to_s + \
" ms, hasta una demanda de " + capacidad_actual.to_s + " registros" +\
" de la BD.\n\n")
uso_futuro_cinco=
f(constante_de_demanda,pendiente_de_demanda,(anio_actual+anios_escalar))
uso_futuro_cuatro=
f(constante_de_demanda,pendiente_de_demanda,(anio_actual+(anios_escalar*3/4)))
uso_futuro_tres=
f(constante_de_demanda,pendiente_de_demanda,(anio_actual+(anios_escalar*1/2)))
uso_futuro_dos=
f(constante_de_demanda,pendiente_de_demanda,(anio_actual+(anios_escalar*1/4)))
if(uso_futuro_cinco <= capacidad_actual)
puts "\nEl sistema satisface el objetivo de escalabilidad."
puts "La escalabilidad de este sistema es: 5"
else
puts " \nEl sistema NO satisface la caracteristica de escalabilidad"
puts "La escalabilidad de este sistema es: 1"
if(uso_futuro_cuatro <= capacidad_actual)
puts " El Capacity Planning de este sistema es 4"
elsif(uso_futuro_tres <= capacidad_actual)
puts " El Capacity Planning de este sistema es 3"
elsif(uso_futuro_dos <= capacidad_actual)
puts " El Capacity Planning de este sistema es 2"
else
puts " El Capacity Planning de este sistema es 1"
end
end
puts "\n Codigo Latex de los resultados de Escalabilidad: \n\n"
puts "Puede ser observado en la F'ormula"
puts " \\ref{eq:resultadosEscalabilidadUsoFuturo}, "
puts "como se realizan"
puts " las sustituciones utilizando el m'etodo propuesto.\n"
puts "\\begin{equation} \\label{eq:resultadosEscalabilidadUsoFuturo} \n" +\
" \\begin{split}"
puts " uso\\_futuro_{cinco} & = f(t+y)\\\\"
puts " & = f(" + anios_escalar.to_s + "+" +\
anio_actual.to_s + ") \\\\"
puts " & = "+ uso_futuro_cinco.to_s + " \\\\ \n \\\\"
puts " \\end{split} \n\\end{equation} \n \n "
puts " Codigo Latex de los resultados de Capacity Planning: \n\n"
puts "\\begin{equation} \\label{eq:resultadosCapacityPlanningUsoFuturo} \n"+\
" \\begin{split}"
puts " uso\\_futuro_{cinco} & = f(t+y)\\\\"
puts " & = f(" + anios_escalar.to_s + "+" + \
anio_actual.to_s + ") \\\\"
puts " & = "+ uso_futuro_cinco.to_s + " \\\\ \n \\\\"
puts " uso\\_futuro_{cuatro} & = f\\left(\\frac{3}{4}*t+y\\right) \\\\"
puts " & = f\\left(\\frac{3}{4}*" + anios_escalar.to_s + \
"+" + anio_actual.to_s + "\\right) \\\\"
puts " & = " + uso_futuro_cuatro.to_s + " \\\\ \n \\\\"
puts " uso\\_futuro_{tres} & = f\\left(\\frac{1}{2}*t+y\\right) \\\\"
puts " & = f\\left(\\frac{1}{2}*" + anios_escalar.to_s + \
"+" + anio_actual.to_s + "\\right) \\\\"
puts " & = "+ uso_futuro_tres.to_s + " \\\\ \n \\\\"
puts " uso\\_futuro_{dos} & = f\\left(\\frac{1}{4}*t+y\\right) \\\\"
puts " & = f\\left(\\frac{1}{4}*" + anios_escalar.to_s + \
"+" + anio_actual.to_s + "\\right) \\\\"
puts " & = "+ uso_futuro_dos.to_s + " \\\\ "
puts " \\end{split} \n\\end{equation} \n \n "
anio_maximo = (capacidad_actual-constante_de_demanda) / pendiente_de_demanda
puts "Sustituyendo como se muestra en la f'ormula" +\
" \\ref{eq:estimacionDeAnio}, se estima que " +\
"el sistema ser'a capaz de satisfacer la demanda hasta antes del a~no " +\
anio_maximo.ceil.to_s + ".\n"
puts "\\begin{equation} \\label{eq:estimacionDeAnio} \n \\begin{split}"
puts " \\text{A~no} & = \\left( \\frac{capacidad\\_actual" +\
" + constante\\_demanda}{pendiente\\_de\\_demanda" +\
"} \\right ) \\\\"
puts " & = \\left( \\frac{" + capacidad_actual.to_s + \
"+" + constante_de_demanda.to_s + \
"}{" + pendiente_de_demanda.to_s + "} \\right) \\\\"
puts " & = " + anio_maximo.to_s + " \\\\"
puts " \\end{split} \n\\end{equation} \n \n "
end