mirror of
https://gitlab.com/manzerbredes/paper-lowrate-iot.git
synced 2025-06-05 22:27:39 +00:00
Add G5K scripts
This commit is contained in:
parent
ceabb2d95d
commit
5720cf71f4
3 changed files with 167 additions and 0 deletions
48
g5k/clients.py
Executable file
48
g5k/clients.py
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
from __future__ import division
|
||||||
|
import os,sys,random, time,datetime
|
||||||
|
from subprocess import Popen
|
||||||
|
|
||||||
|
# Check script argument
|
||||||
|
if len(sys.argv) != 6:
|
||||||
|
print("Usage: "+sys.argv[0]+" <mysqlServerIp> <nbSensors> <nbSensorsFactor> <requestPerSensor> <sensorsRequestPerSec>")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# Init script parameters
|
||||||
|
serverIp=sys.argv[1]
|
||||||
|
nbSensors=int(sys.argv[2])
|
||||||
|
nbSensorsFactor=int(sys.argv[3])
|
||||||
|
effectiveNbSensors=nbSensors*nbSensorsFactor
|
||||||
|
requestPerSensor=int(sys.argv[4])
|
||||||
|
frequency=int(sys.argv[5])
|
||||||
|
avgSiteTemp=list()
|
||||||
|
for i in range(0,effectiveNbSensors):
|
||||||
|
avgSiteTemp.append(random.randint(-10,30))
|
||||||
|
|
||||||
|
|
||||||
|
def insert(sensorId, value):
|
||||||
|
""" Send value of sensorId into the database """
|
||||||
|
stamp=int(time.mktime(datetime.datetime.today().timetuple()))
|
||||||
|
insertCMD = "mysql -u user --password=mysql --host="+serverIp+" experiment -e"
|
||||||
|
insertCMD=insertCMD.split()
|
||||||
|
insertCMD.append("INSERT INTO temperature (id,stamp,val) VALUES("+str(sensorId)+","+str(stamp)+","+str(value)+");")
|
||||||
|
Popen(insertCMD) # Run command asynchronously
|
||||||
|
|
||||||
|
def send():
|
||||||
|
""" Send temperature of each sensors into the database """
|
||||||
|
for i in range(0,effectiveNbSensors):
|
||||||
|
insert(i,random.gauss(avgSiteTemp[i], 3))
|
||||||
|
|
||||||
|
|
||||||
|
# Print infos
|
||||||
|
print("Launching clients with:")
|
||||||
|
print(" - Mysql Server IP {:>20}".format(serverIp))
|
||||||
|
print(" - Number of sensors {:>18}".format(effectiveNbSensors))
|
||||||
|
print(" - Number of request per sensor {:>7}".format(effectiveNbSensors))
|
||||||
|
|
||||||
|
# Send data
|
||||||
|
for i in range(0, requestPerSensor):
|
||||||
|
send()
|
||||||
|
time.sleep(1/frequency) # We assume send() take no time
|
||||||
|
|
||||||
|
|
111
g5k/init-nodes.sh
Executable file
111
g5k/init-nodes.sh
Executable file
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
##### Parameters #####
|
||||||
|
delay=60 # Delay before starting simulation (let CPU energy going down on the server)
|
||||||
|
nbSensors=30
|
||||||
|
nbSensorsFactor=3
|
||||||
|
requestPerSensor=10 # Theorical simulation time is $requestPerSensor/$sensorsRequestPerSec
|
||||||
|
sensorsRequestPerSec=10 # Number of request per seconds
|
||||||
|
######################
|
||||||
|
|
||||||
|
|
||||||
|
logFile="./simLogs.txt"
|
||||||
|
log () {
|
||||||
|
echo -e "\033[0;34m$@\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "subscribe" ] && [ $# -eq 1 ]
|
||||||
|
then
|
||||||
|
# Subscribe
|
||||||
|
log "Subscribing..."
|
||||||
|
oarsub -l slash_22=1+{"virtual!='NO'"}/nodes=2 'sleep "10d"'
|
||||||
|
elif [ "$1" = "deploy" ] && [ $# -eq 1 ]
|
||||||
|
then
|
||||||
|
# Get machine mac address
|
||||||
|
serverSubnet=$(g5k-subnets -im|sed "1q;d")
|
||||||
|
clientSubnet=$(g5k-subnets -im|sed "2q;d")
|
||||||
|
serverMac=$(echo "$serverSubnet"|sed "s/^.*\t//g")
|
||||||
|
clientMac=$(echo "$clientSubnet"|sed "s/^.*\t//g")
|
||||||
|
serverIp=$(echo "$serverSubnet"|sed "s/\t.*$//g")
|
||||||
|
clientIp=$(echo "$clientSubnet"|sed "s/\t.*$//g")
|
||||||
|
serverNode=""
|
||||||
|
clientNode=""
|
||||||
|
|
||||||
|
# Run vms
|
||||||
|
log "Run vms..."
|
||||||
|
isServer=1
|
||||||
|
finished=0
|
||||||
|
for node in $(cat $OAR_NODE_FILE|uniq)
|
||||||
|
do
|
||||||
|
# Init vm images
|
||||||
|
log "Create $node vm image"
|
||||||
|
oarsh $node cp -n /grid5000/virt-images/debian9-x64-base.qcow2 /tmp/
|
||||||
|
oarsh $node qemu-img create -f qcow2 -o backing_file=/tmp/debian9-x64-base.qcow2 /tmp/img.qcow2
|
||||||
|
sleep 1 # Wait for fun
|
||||||
|
|
||||||
|
log "Create $node cloud-init image"
|
||||||
|
oarsh $node cp /grid5000/virt-images/cloud-init-example.sh /tmp/
|
||||||
|
oarsh $node "cd /tmp && export cloud_init_key=\$(cat ~/.ssh/id_rsa.pub) && ./cloud-init-example.sh"
|
||||||
|
#oarsh $node "cd /tmp && sed -i \"s/public-keys/ssh_authorized_keys/g\" cloud-init-data/meta-data"
|
||||||
|
oarsh $node "cd /tmp && genisoimage -output cloud-init-data.iso -volid cidata -joliet -rock cloud-init-data/user-data cloud-init-data/meta-data"
|
||||||
|
|
||||||
|
[ $isServer -eq 1 ] && { curMac=$serverMac; isServer=0; serverNode=$node; } || { curMac=$clientMac; finished=1; clientNode=$node; }
|
||||||
|
log "Launch vm $node"
|
||||||
|
oarsh $node kvm -m 2048 -hda /tmp/img.qcow2 -netdev bridge,id=br0 -device virtio-net-pci,netdev=br0,id=nic1,mac=$curMac -cdrom /tmp/cloud-init-data.iso -display none -daemonize &
|
||||||
|
[ $finished -eq 1 ] && break
|
||||||
|
done
|
||||||
|
|
||||||
|
log "Installing mysql on $serverIp"
|
||||||
|
onNode="ssh -q root@$serverIp"
|
||||||
|
|
||||||
|
# One apt-get update seems to be not enought to get mysql-server
|
||||||
|
$onNode "apt-get update && apt-get update"
|
||||||
|
$onNode apt-get -y install mysql-server
|
||||||
|
# Enable mysql connection from outside
|
||||||
|
$onNode sed -i "s/bind-address/#bind-address/g" /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||||
|
$onNode systemctl restart mysql
|
||||||
|
rsync -avh setup-mysql.sql root@$serverIp:/tmp/
|
||||||
|
# Then execute it
|
||||||
|
$onNode "mysql < /tmp/setup-mysql.sql"
|
||||||
|
|
||||||
|
# Switch to client
|
||||||
|
onNode="ssh -q root@$clientIp"
|
||||||
|
$onNode "apt-get update && apt-get update"
|
||||||
|
$onNode apt-get -y install mysql-server
|
||||||
|
rsync -avh clients.py root@$clientIp:/tmp/
|
||||||
|
|
||||||
|
##### Start Simulation #####
|
||||||
|
log "Simulation will start in ${delay}s"
|
||||||
|
sleep $delay
|
||||||
|
echo "Simulation start at " $(date "+%s") >> $logFile
|
||||||
|
$onNode python /tmp/clients.py $serverIp $nbSensors $nbSensorsFactor $requestPerSensor $sensorsRequestPerSec
|
||||||
|
echo "Simulation end at " $(date "+%s") >> $logFile
|
||||||
|
##### End Simulation #####
|
||||||
|
|
||||||
|
log "Network Settings:"
|
||||||
|
log " - Server $serverIp $serverMac"
|
||||||
|
log " - Client $clientIp $clientMac"
|
||||||
|
elif [ "$1" = "kill" ] && [ $# -eq 1 ]
|
||||||
|
then
|
||||||
|
isServer=1
|
||||||
|
finished=0
|
||||||
|
for node in $(cat $OAR_NODE_FILE|uniq)
|
||||||
|
do
|
||||||
|
[ $isServer -eq 1 ] && { curMac=$serverMac; isServer=0; serverNode=$node; } || { curMac=$clientMac; finished=1; clientNode=$node; }
|
||||||
|
log "Killing vm on node $node"
|
||||||
|
oarsh $node pkill -9 qemu &
|
||||||
|
[ $finished -eq 1 ] && break
|
||||||
|
done
|
||||||
|
elif [ "$1" = "inspect" ] && [ $# -eq 2 ]
|
||||||
|
then
|
||||||
|
mysql --host="$2" -u user --password="mysql" experiment -e "SELECT * FROM temperature;"
|
||||||
|
elif [ "$1" = "flush" ] && [ $# -eq 2 ]
|
||||||
|
then
|
||||||
|
mysql --host="$2" -u user --password="mysql" experiment -e "TRUNCATE TABLE temperature;"
|
||||||
|
else
|
||||||
|
echo "Usage:"
|
||||||
|
echo " - $0 subscribe"
|
||||||
|
echo " - $0 deploy"
|
||||||
|
fi
|
||||||
|
|
8
g5k/setup-mysql.sql
Normal file
8
g5k/setup-mysql.sql
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
create DATABASE IF NOT EXISTS experiment;
|
||||||
|
use experiment;
|
||||||
|
create TABLE IF NOT EXISTS temperature (id INTEGER,stamp INTEGER, val INTEGER);
|
||||||
|
|
||||||
|
use mysql;
|
||||||
|
CREATE USER 'user'@'%' IDENTIFIED BY 'mysql';
|
||||||
|
GRANT ALL ON experiment.* TO 'user'@'%';
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue