Last active
July 8, 2017 21:43
-
-
Save andreaswork/29968716b9572b3863d557f683f4cf48 to your computer and use it in GitHub Desktop.
lapio-9.7klo00:41
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<component name="ProjectDictionaryState"> | |
<dictionary name="null" /> | |
</component> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<module type="PYTHON_MODULE" version="4"> | |
<component name="NewModuleRootManager"> | |
<content url="file://$MODULE_DIR$" /> | |
<orderEntry type="inheritedJdk" /> | |
<orderEntry type="sourceFolder" forTests="false" /> | |
</component> | |
<component name="TestRunnerService"> | |
<option name="PROJECT_TEST_RUNNER" value="Unittests" /> | |
</component> | |
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectInspectionProfilesVisibleTreeState"> | |
<entry key="Project Default"> | |
<profile-state> | |
<expanded-state> | |
<State> | |
<id /> | |
</State> | |
</expanded-state> | |
<selected-state> | |
<State> | |
<id>Buildout</id> | |
</State> | |
</selected-state> | |
</profile-state> | |
</entry> | |
</component> | |
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6.1 virtualenv at C:\Users\Andreas\lapio" project-jdk-type="Python SDK" /> | |
<component name="SvnConfiguration"> | |
<configuration /> | |
</component> | |
<component name="masterDetails"> | |
<states> | |
<state key="ScopeChooserConfigurable.UI"> | |
<settings> | |
<splitter-proportions> | |
<option name="proportions"> | |
<list> | |
<option value="0.2" /> | |
</list> | |
</option> | |
</splitter-proportions> | |
</settings> | |
</state> | |
</states> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectModuleManager"> | |
<modules> | |
<module fileurl="file://$PROJECT_DIR$/.idea/lapio.iml" filepath="$PROJECT_DIR$/.idea/lapio.iml" /> | |
</modules> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="VcsDirectoryMappings"> | |
<mapping directory="$PROJECT_DIR$/Lapio_dev" vcs="Git" /> | |
</component> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# sitename User IP/URL ssh_port use | |
Rovaniemi pul pulrov.dyndns.org 22 1 | |
Oulu pul puloul.dyndns.org 222 0 | |
Jyvaskyla pul puljyv.dyndns.org 22 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from subprocess import * | |
import glob | |
import numpy as np | |
import sys | |
import getopt | |
import time | |
from datetime import datetime | |
''' | |
Black = switched off, green = all good, yellow = needs attention soon, orange = needs attention NOW, red = FAILED | |
1. Read all available data from measurment stations (diskspace, measurmentstatus, temp, voltages etc.) | |
2. Write station data into a file | |
3. Read headerfile for threshold values | |
4. Compare header values to station values | |
5. Output comparison results to a file | |
6. Using flask, output comparison result to a website | |
7. DONE! | |
''' | |
def getDiskStatus(station): | |
try: | |
sshCommand = 'ssh -p {} {}@{} df -h | grep /dev/sda5'.format(station['port'], station['user'], station['ip']) | |
command = os.popen(sshCommand) | |
read = command.readline() | |
read = read.split() | |
diskStatus = read[1], read[3], read[4] | |
except: | |
diskStatus = ['X', 'X', 'X'] | |
return diskStatus | |
def getConnectionStatus(station): | |
#print('\nChecking connection to: {}'.format(station['name'])) | |
if station['port'] is not '0': | |
try: | |
sshCommand = os.system('nc -z -w 4 {} {}'.format(station['ip'], station['port'])) | |
if sshCommand == 0: | |
#print('connection to: {} was successfull!'.format(station['name'])) | |
return '0' | |
else: | |
return '1' | |
except: | |
return 'error' | |
def getMeasurmentStatus(station, timeThreshold=2): | |
sshCommand = 'ssh -p {} {}@{} tail -1 {}'.format(station['port'], station['user'], station['ip'], "outfile") | |
try: | |
command = os.popen(sshCommand, 'r') | |
res = command.readline() | |
res = res.split() | |
timeStr = res[1] + ' ' + res[2] | |
logTime = datetime.strptime(timeStr, '%d.%m.%Y %H:%M:%S') | |
remoteEpoch = (logTime - datetime(1970, 1, 1)).total_seconds() | |
localEpoch = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds() | |
if (localEpoch - remoteEpoch) < timeThreshold: | |
logStatus = int(localEpoch - remoteEpoch) | |
else: | |
logStatus = int(localEpoch - remoteEpoch) | |
except: | |
logStatus = 'Null' | |
timeStr= 'Error Error Error' | |
return logStatus, timeStr | |
def readHeaderFiles(headerfolder): | |
headerlist = [] | |
for files in headerfolder: | |
with open(files) as file: | |
for line in file: | |
line = line.split() | |
if line[0] is not '#': | |
pass | |
else: | |
headerlist.append(line[1:]) | |
#print(headerlist) | |
return headerlist | |
def readAddressFile(filename): | |
stationsList = [] | |
with open(filename) as file: | |
for line in file: | |
line = line.split() | |
if line[0] is not '#': | |
stationsList.append({'name': line[0], 'user': line[1], 'ip': line[2], 'port': line[3], 'use': line[4],}) | |
else: | |
pass | |
#print(stationsList) | |
return stationsList | |
#main app, read address, connect to station, fetch needed data, write it to outputfile. | |
def main(address_info, header_data, outFileName = 'statusInfo.txt'): | |
# Read data from address and header files | |
loop = 0 # for | |
while loop == 0: # testing | |
time.sleep(2) | |
addressInfo = readAddressFile(address_info) | |
headerInfo = readHeaderFiles(header_data) | |
'''############################################''' | |
stationStatuslist = [] | |
headerStatuslist = [] | |
for line in addressInfo: | |
if line['use'] is not '0': | |
connectionStatus = getConnectionStatus(line) | |
measurmentStatus = getMeasurmentStatus(line) | |
diskStatus = getDiskStatus(line) | |
stationStatuslist.append([measurmentStatus[1], line['name'], connectionStatus, | |
diskStatus[0], diskStatus[1], diskStatus[2]]) | |
print(stationStatuslist) | |
else: | |
#print("\nSkipping: {}, monitoring turned off!!".format(line['name'])) | |
stationStatuslist.append(['XX.XX.XXXX XX:XX:XX', line['name'], 'N', 'N', 'N', 'N']) | |
if outFileName is None: | |
return stationStatuslist | |
else: | |
file = open(outFileName, 'w') | |
file.write( | |
"Date & Time(UT)\t\t\tStation\t\tNetwork (0=OK)\tTotal disk size\t\tSpaceleft(G)\tSpace left(%)\n") | |
for i in stationStatuslist: | |
file.write('{}\t\t{}\t\t{}\t\t{}\t\t\t{}\t\t{}\t\n'.format(i[0], i[1], i[2], i[3], i[4], i[5])) | |
file.close() | |
#get data from station | |
#read header_file | |
# compare station_data to header_data | |
''' read conf file for addresses ''' | |
if __name__ == "__main__": | |
station_addresses = "addresses.conf" | |
header_data = glob.glob('/home/andreas/PycharmProjects/Lapio 0.2/headers/*.txt') | |
main(station_addresses, header_data) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import numpy | |
import datetime | |
import time | |
import glob | |
import fnmatch | |
def readPul(fname): | |
ff = open(fname, 'r') | |
dd = ff.readlines() | |
rec = {} | |
for ll in dd: | |
ll = ll.split() | |
if ll[0][0] == '#': | |
pass | |
else: | |
name = ll[0] | |
rec[name] = {} | |
rec[name]['user'] = ll[1] | |
rec[name]['url'] = ll[2] | |
rec[name]['port'] = ll[3] | |
rec[name]['use'] = ll[4] | |
return rec | |
def readStatusFile(fname): | |
ff = open(fname, 'r') | |
dd = ff.readlines() | |
status = {} | |
for line in dd: | |
line = line.split() | |
name = line[2] | |
status[name] = {} | |
status[name]['name'] = line[2] | |
status[name]['logtime'] = line[0] + ' ' + line[1] | |
status[name]['network'] = line[3] | |
status[name]['diskspace'] = line[4] | |
status[name]['spaceleft'] = line[5] | |
status[name]['freespace'] = line[6] | |
return status | |
def checkNetwork(hostname, port): | |
if port is not '0': | |
return os.system('nc -z -w 2 {} {}'.format(hostname, port)) | |
else: | |
return '-1' | |
def pingHost(hostname): | |
return os.system('ping {} -c 1'.format(hostname)) | |
def getTomoLogs(rec): | |
status = [] | |
ret = [] | |
for r in rec: | |
if r[4] == '1': | |
#pingStatus = pingHost(r[2]) | |
pingStatus = checkNetwork(r[2], r[3]) | |
else: | |
#pingStatus = '-' | |
pingStatus = -1 | |
print(r[2], ' ', r[3], ' ', pingStatus) | |
if r[2] is not '0' and pingStatus==0: | |
try: | |
sshCmd = 'ssh -p {} {}@{} tail -1 /home/pul/outfile'.format(r[3], r[1], r[2]) | |
print(sshCmd) | |
cmd = os.popen(sshCmd, 'r') | |
ret = cmd.readline() | |
rval = ret.split() | |
timeStr = rval[0] + ' ' + rval[1] | |
logTime = datetime.datetime.strptime( | |
timeStr,'%Y-%m-%d %H:%M:%S') | |
logTime = (logTime - | |
datetime.datetime(1970,1,1)).total_seconds() | |
t = (datetime.datetime.utcnow() - | |
datetime.datetime(1970,1,1) ).total_seconds() | |
logStatus = int(round(t - logTime,0)) | |
except: | |
#ret = 'ERROR READING LOG' | |
logStatus = -1 | |
else: | |
logStatus = -1 | |
status.append([pingStatus,logStatus,ret]) | |
return status | |
def getTomoLogs2(rec): | |
status = [] | |
for r in rec: | |
# Ping host first | |
pingStatus = pingHost(r[2]) | |
if pingStatus == 0: | |
try: | |
sshCmd = 'ssh -p {} {}@{} tail -1 /home/pul/outfile'.format( | |
r[3],r[1],r[2]) | |
cmd = os.popen(sshCmd,'r') | |
logStatus = '<span class=ok">'+cmd.readline()+'</span>' | |
except: | |
logStatus = '<span class="error">ERROR READING LOG</span>' | |
status.append([pingStatus,logStatus]) | |
else: | |
status.append([pingStatus,'<span class="error">NO NETWORK</span>']) | |
return status | |
''' | |
''' | |
def getRioLogs(rio): | |
tt = datetime.datetime.utcnow() | |
dt = datetime.datetime(tt.year, tt.month, tt.day) | |
dd = dt - datetime.datetime(1970,1,1) | |
timestamp = dd.days * 3600 * 24 | |
status = [] | |
for r in rio: | |
# Ping host first | |
pingStatus = pingHost(r[2]) | |
if pingStatus == 0: | |
try: | |
sshCmd = 'ssh -p {} {}@{} tail -1 /data0/spec-{}/timestamps.log'.format( | |
r[3],r[1],r[2], timestamp) | |
cmd = os.popen(sshCmd,'r') | |
rval = cmd.readline().split() | |
logTime = float(rval[1]) | |
t = (datetime.datetime.utcnow() - datetime.datetime(1970,1,1) ).total_seconds() | |
logStatus = int(round(t - logTime,0)) | |
except: | |
logStatus = -9999 | |
status.append([pingStatus,logStatus]) | |
else: | |
status.append([pingStatus,-1]) | |
return status | |
def getHWStatus(rec): | |
status = [] | |
for r in rec: | |
if r[2] is not '0': | |
try: | |
sshCmd = 'ssh -p {} {}@{} python mtui/mtui.py'.format( | |
r[3],r[1],r[2]) | |
cmd = os.popen(sshCmd,'r') | |
rval = cmd.readline().split() | |
except: | |
rval = ['X','X','X','X'] | |
status.append(rval) | |
else: | |
rval = ['X', 'X', 'X', 'X'] | |
return status | |
def getHWStatus2(rec): | |
status = [] | |
for r in rec: | |
try: | |
sshCmd = 'ssh -p {} {}@{} tail -1 /mnt/sampler/logs/tui.log'.format( | |
r[3],r[1],r[2]) | |
cmd = os.popen(sshCmd,'r') | |
rval = cmd.readline().split() | |
rval = rval[2:] | |
except: | |
rval = ['X','X','X','X'] | |
status.append(rval) | |
return status | |
def getHWStatus3(rec): | |
status = [] | |
for r in rec: | |
nws = checkNetwork(r[2], r[3]) | |
print("HW: {} {} {}".format(r[2], r[3], nws)) | |
if r[2] is not '0' and nws==0: | |
try: | |
sshCmd = 'ssh -p {} {}@{} tail -10 /mnt/sampler/logs/tomo.log'.format( | |
r[3],r[1],r[2]) | |
cmd = os.popen(sshCmd,'r') | |
rr = cmd.readlines() | |
rr.reverse() | |
rval = ['X','X','X','X'] | |
for r in rr: | |
if r.find('[tui]') >= 0: | |
s = r.split() | |
rval = s[3:] | |
break | |
# print(rval) | |
except: | |
rval = ['X','X','X','X'] | |
else: | |
rval = ['X','X','X','X'] | |
status.append(rval) | |
return status | |
def getDirNames(device): | |
dataRoot = '/data/tomo/' | |
deviceDataDir = dataRoot+device | |
z = os.listdir(deviceDataDir) | |
z.sort(reverse=True) | |
return [deviceDataDir, z] | |
def getFileNames(device, day): | |
dataDir = '/data/tomo/'+device+'/'+day+'/DATA/' | |
ff = os.listdir(dataDir) | |
files = fnmatch.filter(ff,'*.png') | |
files.sort() | |
ff = [] | |
for f in files: | |
f = f.split('@') | |
ff.append(f[:2]) | |
return [dataDir,ff] | |
def timesFromFiles(ll): | |
zz = [] | |
for l in ll: | |
#print(l) | |
dd = datetime.datetime.utcfromtimestamp(int(l[0])) | |
timeStr = '{:02d}:{:02d}:{:02d}'.format(dd.hour, dd.minute, dd.second) | |
zz.append(timeStr) | |
return zz | |
def getPicName(name,day,flight): | |
dataDir = '/data/tomo/'+name+'/'+day+'/DATA/' | |
glob = '{}*.png'.format(flight) | |
print(dataDir) | |
print(glob) | |
ff = os.listdir(dataDir) | |
files = fnmatch.filter(ff,glob) | |
plotFile = files[0] | |
return dataDir[1:]+plotFile | |
def getFileRowCount(device,date,filename): | |
fName = '/data/tomo/'+ device + '/' + date + '/DATA/' + filename | |
ff = open(fName,'r') | |
dd = ff.readlines() | |
ff.close() | |
return len(dd) |
We can make this file beautiful and searchable if this error is corrected: It looks like row 7 should actually have 2 columns, instead of 5 in line 6.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sitename,Rovaniemi | |
Measurment,Pulsation | |
Location(coords),xxx | |
Timezone, gmt+2 | |
Date,1.1.2017 | |
TempOut,15 | |
TempIn,0,35,5,30 | |
TempCpu,0,70,20,60 | |
DiskSpace,5,100,10,15 | |
VoltageUps,200,230,210,225 | |
VoltageMeasurment,10,14,11,15 | |
Flowday,min, max | |
FlowdayLast,min,max |
We can make this file beautiful and searchable if this error is corrected: No commas found in this CSV file in line 0.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADERLIST | |
SITENAME: Rovaniemi | |
MEASURMENT: Pulsation | |
COORDINATES: N66.75 E25.96 | |
TIMEZONE: UTC +02:00 | |
DATE: 2017/07/08 | |
2017/07/08 17:47:31 | |
2017/07/08 18:04:31 | |
2017/07/08 18:04:32 | |
2017/07/08 18:04:33 | |
2017/07/08 18:04:34 | |
2017/07/08 18:04:35 | |
2017/07/08 18:09:01 | |
2017/07/08 18:09:02 | |
2017/07/08 18:09:03 | |
2017/07/08 18:09:53 | |
2017/07/08 18:09:54 | |
2017/07/08 18:16:46 | |
2017/07/08 18:16:47 | |
2017/07/08 18:16:48 | |
2017/07/08 18:21:39 | |
2017/07/08 18:21:40 | |
2017/07/08 18:21:41 | |
2017/07/08 18:21:42 | |
2017/07/08 18:21:43 | |
2017/07/08 23:29:43 | |
2017/07/08 23:29:44 | |
2017/07/08 23:29:45 | |
2017/07/08 23:29:46 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADERLIST | |
---|---|
SITENAME: Rovaniemi | |
MEASURMENT: Pulsation | |
COORDINATES: N66.75 E25.96 | |
TIMEZONE: UTC +02:00 | |
DATE: 2017/07/09 | |
['2017/07/09 23:59:44', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:45', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:46', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:47', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:48', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:49', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:50', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:51', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:52', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:53', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:54', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:55', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:56', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:57', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:58', None, None, None, None, None, None, None, None] | |
['2017/07/09 23:59:59', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:00', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:20', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:21', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:22', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:23', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:24', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:25', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:26', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:27', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:28', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:29', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:30', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:31', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:32', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:59', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:00', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:01', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:02', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:03', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:04', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:32:05', None, None, None, None, None, None, None, None] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADERLIST | |
---|---|
SITENAME: Rovaniemi | |
MEASURMENT: Pulsation | |
COORDINATES: N66.75 E25.96 | |
TIMEZONE: UTC +02:00 | |
DATE: 2017/07/10 | |
['2017/07/10 00:00:02', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:04', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:05', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:06', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:07', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:08', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:09', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:10', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:11', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:12', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:13', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:14', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:15', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:16', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:17', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:18', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:19', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:20', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:21', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:22', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:23', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:24', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:25', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:26', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:27', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:28', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:29', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:30', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:31', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:32', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:33', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:34', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:35', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:36', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:37', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:38', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:39', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:40', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:41', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:42', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:43', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:44', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:46', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:47', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:48', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:49', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:50', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:51', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:52', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:53', None, None, None, None, None, None, None, None] | |
['2017/07/10 00:00:54', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:45', None, None, None, None, None, None, None, None] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HEADERLIST | |
---|---|
SITENAME: Rovaniemi | |
MEASURMENT: Pulsation | |
COORDINATES: N66.75 E25.96 | |
TIMEZONE: UTC +02:00 | |
DATE: 2017/07/11 | |
['2017/07/11 23:59:47', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:48', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:49', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:50', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:51', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:52', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:53', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:54', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:55', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:56', None, None, None, None, None, None, None, None] | |
['2017/07/11 23:59:57', None, None, None, None, None, None, None, None] | |
['2017/07/09 00:31:19', None, None, None, None, None, None, None, None] |
We can make this file beautiful and searchable if this error is corrected: It looks like row 8 should actually have 2 columns, instead of 5 in line 7.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
contains threshold values, min max high low | |
Sitename,Rovaniemi | |
Measurment,Pulsation | |
Location(coords),xxx | |
Timezone, gmt+2 | |
Date,1.1.2017 | |
TempOut,15 | |
TempIn,0,35,5,30 | |
TempCpu,0,70,20,60 | |
DiskSpace,5,100,10,15 | |
VoltageUps,200,230,210,225 | |
VoltageMeasurment,10,14,11,15 | |
Flowday,min, max | |
FlowdayLast,min,max |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sitename: Rovaniemi | |
LocationName: Pulsaatio | |
Location(co-ordinates): +67.4,+25.4 | |
Timezone: 2.0 | |
Date: <todays_date> | |
TempOut: 15 | |
TempIn: 0 35 5 30 | |
TempCpu: min max low high | |
DiskSpace: 5 100 10 90 | |
VoltageUPS: min max low high | |
Voltage: min max low highF | |
Flowday: <null> | |
FlowdayLast: <null> | |
''' | |
headerInfolist = [] | |
with open(filename) as file: | |
for line in file: | |
line = line.split() | |
headerInfolist.append(line) | |
#line2 = headerInfolist2.append({'Sitename': line2[0], 'LocationName': line2[1], 'Location(co-ordinates)': line2[2], | |
# 'Timezone': line2[3], 'Date': line2[4], 'tempOut': line2[5], 'tempIn': line2[6], | |
# 'tempCpu': line2[7], 'Disk space': line2[8], 'VoltageUps': line2[9], | |
# 'Voltage': line2[10], 'Flowday': line2[11], 'Flowdaylast': line2[12]}) | |
print(headerInfolist) | |
return headerInfolist | |
''' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Sitename: Sodankyla | |
# LocationName: Pulsaatio | |
# Location(co-ords): +67.4,+25.4 | |
# Timezone: 2.0 | |
# Date: <todays_date> | |
# TEMPOUT: min max low high | |
# TEMPIN: min max low high | |
# TEMCPU: min max low high | |
# DISKSPACE: min max low high | |
# VOLTAGEUPS: min max low high | |
# VOLTAGE: min max low high | |
# FLOWDAY: <null> | |
# FLOWDAYLAST: <null> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Auto detect text files and perform LF normalization | |
* text=auto |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask, render_template | |
import getStatusWeb | |
import datetime | |
app = Flask(__name__) | |
app.debug = True | |
addressesConfFile = 'C:/Users/Andreas/PycharmProjects/lapio/addresses.conf' | |
pulStatusFile = 'C:/Users/Andreas/PycharmProjects/lapio/statusInfo.txt' | |
@app.route("/") | |
def index(): | |
return render_template('index.html') | |
@app.route("/mag") | |
def mag(): | |
return render_template('mag.html') | |
@app.route("/rio") | |
def rio(): | |
return render_template('rio.html') | |
@app.route("/radar") | |
def radar(): | |
return render_template('radar.html') | |
@app.route("/pul") | |
def pul(): | |
pul = getStatusWeb.readPul(addressesConfFile) | |
pulStatus = getStatusWeb.readStatusFile(pulStatusFile) | |
# Merge data | |
for key in pul: | |
pul[key].update(pulStatus[key]) | |
# Sort pul keys | |
pulkeys = list(pul.keys()) | |
pulkeys.sort() | |
q = datetime.datetime.utcnow() | |
timeString = '{:%Y-%m-%d %H:%M:%S}'.format(q) | |
# return render_template('list_info.html', pul=pul, pulkeys=pulkeys, time=timeString) | |
return render_template('pul.html', pul=pul, pulkeys=pulkeys, time=timeString) | |
@app.route("/tomo") | |
def tomo(): | |
return render_template('tomo.html') | |
@app.route("/seismo") | |
def seismo(): | |
return render_template('seismo.html') | |
@app.route("/vlf") | |
def vlf(): | |
return render_template('vlf.html') | |
if __name__ == "__main__": | |
app.run() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Ask the user for input | |
host = raw_input("Enter a host to ping: ") | |
# Set up the echo command and direct the output to a pipe | |
p1 = subprocess.Popen(['ping', '-c 2', host], stdout=subprocess.PIPE) | |
# Run the command | |
output = p1.communicate()[0] | |
print output | |
-------------------------------------------------------- | |
target = raw_input("Enter an IP or Host to ping:") | |
host = subprocess.Popen(['host', target], stdout = subprocess.PIPE).communicate()[0] | |
print host | |
---------------------------------------------- | |
import logging | |
from logging.handlers import TimedRotatingFileHandler | |
# format the log entries | |
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s') | |
handler = TimedRotatingFileHandler('/path/to/logfile.log', | |
when='midnight', | |
backupCount=10) | |
handler.setFormatter(formatter) | |
logger = logging.getLogger(__name__) | |
logger.addHandler(handler) | |
logger.setLevel(logging.DEBUG) | |
# generate example messages | |
for i in range(10000): | |
time.sleep(1) | |
logger.debug('debug message') | |
logger.info('informational message') | |
logger.warn('warning') | |
logger.error('error message') | |
logger.critical('critical failure') | |
----------------------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
body {font-family: 'Roboto', sans-serif;margin:20px;} | |
h1 {margin-top:20px;margin-bottom:20px;} | |
h2 {} | |
table {margin-left:60px;border-collapse: collapse; border: 1px solid black;} | |
th {} | |
tr {border: 1px solid #888;} | |
td {padding:5px;text-align:right;} | |
#header {color:#888;font-size:400%; font-weight:bolder;margin-bottom:10px;} | |
#time {color:#888; font-size:150%;font-weight:bold;margin-bottom:40px;margin-top:10px;} | |
#dirlist {} | |
#files {} | |
#plot {width:95%;} | |
#datatable {table-layout:fixed; width:90%;} | |
#measurmentList { | |
font-family: "Times New Roman", Georgia, Serif;, size:30; margin:0px; | |
text-align: center; | |
font-size: 15pt; | |
} | |
#measurmentList table { | |
border: 3px #00 solid; | |
} | |
#dateTimeClock { | |
font-family: 'Robot', sans-serif, size: 30;margin:10px; | |
font-size: 50pt; | |
text-align: center; | |
} | |
.section {} | |
.tableheader {background-color:#888;font-weight:bold;color:#eee;} | |
.datadate {width:10%;text-align:left;vertical-align:top;} | |
.dataflight {width:20%;text-align:left;vertical-align:top;} | |
.dataplot {width:70%;vertical-align:top;} | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ | |
.greenButton { | |
-moz-box-shadow:inset 0px 1px 0px 0px #3dc21b; | |
-webkit-box-shadow:inset 0px 1px 0px 0px #3dc21b; | |
box-shadow:inset 0px 1px 0px 0px #3dc21b; | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #44c767), color-stop(1, #5cbf2a)); | |
background:-moz-linear-gradient(top, #44c767 5%, #5cbf2a 100%); | |
background:-webkit-linear-gradient(top, #44c767 5%, #5cbf2a 100%); | |
background:-o-linear-gradient(top, #44c767 5%, #5cbf2a 100%); | |
background:-ms-linear-gradient(top, #44c767 5%, #5cbf2a 100%); | |
background:linear-gradient(to bottom, #44c767 5%, #5cbf2a 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#44c767', endColorstr='#5cbf2a',GradientType=0); | |
background-color:#44c767; | |
-moz-border-radius:6px; | |
-webkit-border-radius:6px; | |
border-radius:6px; | |
border:1px solid #18ab29; | |
display:inline-block; | |
cursor:pointer; | |
color:#ffffff; | |
font-family:Arial; | |
font-size:20px; | |
font-weight:bold; | |
padding:6px 24px; | |
text-decoration:none; | |
text-shadow:0px 1px 0px #2f6627; | |
} | |
.greenButton:hover { | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #5cbf2a), color-stop(1, #44c767)); | |
background:-moz-linear-gradient(top, #5cbf2a 5%, #44c767 100%); | |
background:-webkit-linear-gradient(top, #5cbf2a 5%, #44c767 100%); | |
background:-o-linear-gradient(top, #5cbf2a 5%, #44c767 100%); | |
background:-ms-linear-gradient(top, #5cbf2a 5%, #44c767 100%); | |
background:linear-gradient(to bottom, #5cbf2a 5%, #44c767 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5cbf2a', endColorstr='#44c767',GradientType=0); | |
background-color:#5cbf2a; | |
} | |
.greenButton:active { | |
position:relative; | |
top:1px; | |
} | |
.redButton { | |
-moz-box-shadow:inset 0px 1px 0px 0px #f5978e; | |
-webkit-box-shadow:inset 0px 1px 0px 0px #f5978e; | |
box-shadow:inset 0px 1px 0px 0px #f5978e; | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f24537), color-stop(1, #c62d1f)); | |
background:-moz-linear-gradient(top, #f24537 5%, #c62d1f 100%); | |
background:-webkit-linear-gradient(top, #f24537 5%, #c62d1f 100%); | |
background:-o-linear-gradient(top, #f24537 5%, #c62d1f 100%); | |
background:-ms-linear-gradient(top, #f24537 5%, #c62d1f 100%); | |
background:linear-gradient(to bottom, #f24537 5%, #c62d1f 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f24537', endColorstr='#c62d1f',GradientType=0); | |
background-color:#f24537; | |
-moz-border-radius:6px; | |
-webkit-border-radius:6px; | |
border-radius:6px; | |
border:1px solid #d02718; | |
display:inline-block; | |
cursor:pointer; | |
color:#ffffff; | |
font-family:Arial; | |
font-size:20px; | |
font-weight:bold; | |
padding:6px 24px; | |
text-decoration:none; | |
text-shadow:0px 1px 0px #810e05; | |
} | |
.redButton:hover { | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #c62d1f), color-stop(1, #f24537)); | |
background:-moz-linear-gradient(top, #c62d1f 5%, #f24537 100%); | |
background:-webkit-linear-gradient(top, #c62d1f 5%, #f24537 100%); | |
background:-o-linear-gradient(top, #c62d1f 5%, #f24537 100%); | |
background:-ms-linear-gradient(top, #c62d1f 5%, #f24537 100%); | |
background:linear-gradient(to bottom, #c62d1f 5%, #f24537 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#c62d1f', endColorstr='#f24537',GradientType=0); | |
background-color:#c62d1f; | |
} | |
.redButton:active { | |
position:relative; | |
top:1px; | |
} | |
.blackButton { | |
-moz-box-shadow:inset 0px 1px 0px 0px #000000; | |
-webkit-box-shadow:inset 0px 1px 0px 0px #000000; | |
box-shadow:inset 0px 1px 0px 0px #000000; | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #050505), color-stop(1, #616161)); | |
background:-moz-linear-gradient(top, #050505 5%, #616161 100%); | |
background:-webkit-linear-gradient(top, #050505 5%, #616161 100%); | |
background:-o-linear-gradient(top, #050505 5%, #616161 100%); | |
background:-ms-linear-gradient(top, #050505 5%, #616161 100%); | |
background:linear-gradient(to bottom, #050505 5%, #616161 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#050505', endColorstr='#616161',GradientType=0); | |
background-color:#050505; | |
-moz-border-radius:6px; | |
-webkit-border-radius:6px; | |
border-radius:6px; | |
border:1px solid #0a0a0a; | |
display:inline-block; | |
cursor:pointer; | |
color:#ffffff; | |
font-family:Arial; | |
font-size:20px; | |
font-weight:bold; | |
padding:6px 24px; | |
text-decoration:none; | |
text-shadow:0px 1px 0px #000000; | |
} | |
.blackButton:hover { | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #616161), color-stop(1, #050505)); | |
background:-moz-linear-gradient(top, #616161 5%, #050505 100%); | |
background:-webkit-linear-gradient(top, #616161 5%, #050505 100%); | |
background:-o-linear-gradient(top, #616161 5%, #050505 100%); | |
background:-ms-linear-gradient(top, #616161 5%, #050505 100%); | |
background:linear-gradient(to bottom, #616161 5%, #050505 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#616161', endColorstr='#050505',GradientType=0); | |
background-color:#616161; | |
} | |
.blackButton:active { | |
position:relative; | |
top:1px; | |
} | |
.yellowButton { | |
-moz-box-shadow:inset 0px 1px 0px 0px #cdf725; | |
-webkit-box-shadow:inset 0px 1px 0px 0px #cdf725; | |
box-shadow:inset 0px 1px 0px 0px #cdf725; | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f7ff00), color-stop(1, #dff05b)); | |
background:-moz-linear-gradient(top, #f7ff00 5%, #dff05b 100%); | |
background:-webkit-linear-gradient(top, #f7ff00 5%, #dff05b 100%); | |
background:-o-linear-gradient(top, #f7ff00 5%, #dff05b 100%); | |
background:-ms-linear-gradient(top, #f7ff00 5%, #dff05b 100%); | |
background:linear-gradient(to bottom, #f7ff00 5%, #dff05b 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7ff00', endColorstr='#dff05b',GradientType=0); | |
background-color:#f7ff00; | |
-moz-border-radius:6px; | |
-webkit-border-radius:6px; | |
border-radius:6px; | |
border:1px solid #cbeb15; | |
display:inline-block; | |
cursor:pointer; | |
color:#cfc9c9; | |
font-family:Arial; | |
font-size:20px; | |
font-weight:bold; | |
padding:6px 24px; | |
text-decoration:none; | |
text-shadow:0px 1px 0px #fafa0d; | |
} | |
.yellowButton:hover { | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #dff05b), color-stop(1, #f7ff00)); | |
background:-moz-linear-gradient(top, #dff05b 5%, #f7ff00 100%); | |
background:-webkit-linear-gradient(top, #dff05b 5%, #f7ff00 100%); | |
background:-o-linear-gradient(top, #dff05b 5%, #f7ff00 100%); | |
background:-ms-linear-gradient(top, #dff05b 5%, #f7ff00 100%); | |
background:linear-gradient(to bottom, #dff05b 5%, #f7ff00 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dff05b', endColorstr='#f7ff00',GradientType=0); | |
background-color:#dff05b; | |
} | |
.yellowButton:active { | |
position:relative; | |
top:1px; | |
} | |
.orangeButton { | |
-moz-box-shadow:inset 0px 1px 0px 0px #f2c34b; | |
-webkit-box-shadow:inset 0px 1px 0px 0px #f2c34b; | |
box-shadow:inset 0px 1px 0px 0px #f2c34b; | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f57513), color-stop(1, #f5bc49)); | |
background:-moz-linear-gradient(top, #f57513 5%, #f5bc49 100%); | |
background:-webkit-linear-gradient(top, #f57513 5%, #f5bc49 100%); | |
background:-o-linear-gradient(top, #f57513 5%, #f5bc49 100%); | |
background:-ms-linear-gradient(top, #f57513 5%, #f5bc49 100%); | |
background:linear-gradient(to bottom, #f57513 5%, #f5bc49 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f57513', endColorstr='#f5bc49',GradientType=0); | |
background-color:#f57513; | |
-moz-border-radius:6px; | |
-webkit-border-radius:6px; | |
border-radius:6px; | |
border:1px solid #f5bf62; | |
display:inline-block; | |
cursor:pointer; | |
color:#fafafa; | |
font-family:Arial; | |
font-size:20px; | |
font-weight:bold; | |
padding:6px 24px; | |
text-decoration:none; | |
text-shadow:0px 1px 0px #ebb159; | |
} | |
.orangeButton:hover { | |
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f5bc49), color-stop(1, #f57513)); | |
background:-moz-linear-gradient(top, #f5bc49 5%, #f57513 100%); | |
background:-webkit-linear-gradient(top, #f5bc49 5%, #f57513 100%); | |
background:-o-linear-gradient(top, #f5bc49 5%, #f57513 100%); | |
background:-ms-linear-gradient(top, #f5bc49 5%, #f57513 100%); | |
background:linear-gradient(to bottom, #f5bc49 5%, #f57513 100%); | |
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5bc49', endColorstr='#f57513',GradientType=0); | |
background-color:#f5bc49; | |
} | |
.orangeButton:active { | |
position:relative; | |
top:1px; | |
} | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ | |
/* ------------------------------------BUTTONS----------------------------------------------------- */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
setInterval(function(){ | |
var date = new Date(); | |
var format = "YYYY-MMM-DD DDD"; | |
dateConvert(date,format) | |
}, 1); | |
function dateConvert(dateobj,format){ | |
var year = dateobj.getFullYear(); | |
var month= ("0" + (dateobj.getMonth()+1)).slice(-2); | |
var date = ("0" + dateobj.getDate()).slice(-2); | |
var hours = ("0" + dateobj.getHours()).slice(-2); | |
var minutes = ("0" + dateobj.getMinutes()).slice(-2); | |
var seconds = ("0" + dateobj.getSeconds()).slice(-2); | |
var day = dateobj.getDay(); | |
var months = ["1","2","3","4","5","6","7","8","9","10","11","12"]; | |
var converted_date = ""; | |
switch(format){ | |
case "YYYY-MM-DD": | |
converted_date = year + "-" + month + "-" + date; | |
break; | |
case "YYYY-MMM-DD DDD": | |
converted_date = year + "-" + months[parseInt(month)-1] + "-" + date + " " + hours + ":" + minutes + ":" + seconds; | |
break; | |
} | |
//return converted_date; | |
// to show it I used innerHTMl in a <p> tag | |
document.getElementById("dateTimeClock").innerHTML = converted_date; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function tS(){ | |
x=new Date(tN().getUTCFullYear(),tN().getUTCMonth(),tN().getUTCDate(), | |
tN().getUTCHours(),tN().getUTCMinutes(),tN().getUTCSeconds()); | |
x.setTime(x.getTime()+dS()); return x;} | |
function tN(){ | |
return new Date(); } | |
function dS(){ | |
return ((tN().getTime()>fD(0,2,4,-1).getTime())&&(tN().getTime()<fD(0,9,5,-1).getTime()))?3600000:0; } | |
function fD(d,m,h,p){ | |
var week=(p<0)?7*(p+1):7*(p-1),nm=(p<0)?m+1:m,x=new Date(tN().getUTCFullYear(),nm,1,h,0,0), | |
dOff=0; if(p<0){ x.setTime(x.getTime()-86400000);} | |
if(x.getDay()!=d){ dOff=(x.getDay()<d)?(d-x.getDay()):0-(x.getDay()-d); | |
if(p<0&&dOff>0){ week-=7; } if(p>0&&dOff<0){ week+=7;} | |
x.setTime(x.getTime()+((dOff+week)*86400000)); | |
} | |
return x;} | |
function lZ(x){ | |
return (x>9)?x:'0'+x;} | |
function dT(){ | |
if(fr==0){ fr=1; document.write('<span id=\"tP\">'+eval(oT)+'</span>'); } | |
document.getElementById('tP').innerHTML=eval(oT); setTimeout('dT()',1000); } | |
function dE(x){ | |
if(x==1||x==21||x==31){ return 'st'; } | |
if(x==2||x==22){ return 'nd'; } | |
if(x==3||x==23){ return 'rd'; } | |
return 'th'; } | |
function dTd(){ | |
if(frd==0){ frd=1; document.write('<span id=\"tPd\">'+eval(oTd)+'</span>'); } | |
document.getElementById('tPd').innerHTML=eval(oTd); setTimeout('dTd()',1000); } | |
function y4(x){ return (x<500)?x+1900:x; } | |
var fr=0 | |
var frd=0 | |
var oT=\"lZ(tS().getHours())+':'+lZ(tS().getMinutes())+':'+lZ(tS().getSeconds())\" | |
var dN=new Array('Sun','Mon','Tues','Wednes','Thurs','Fri','Satur') | |
var mN=new Array('January','February','March','April','May','June','July','August','September','October','November','December') | |
var oTd=\"dN[tS().getDay()]+'day, '+tS().getDate()+dE(tS().getDate())+' '+mN[tS().getMonth()]+' '+y4(tS().getYear())\" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import csv | |
import os | |
headerInfoFile = 'C:/Users/Andreas/PycharmProjects/lapio/headers/pulrov_header.csv' | |
headerInfolist = [] | |
def readHeaderfile(headerDir): | |
for csvFilename in os.listdir(headerDir): | |
if not csvFilename.endswith('_header.csv'): | |
continue | |
csvRows = [] | |
with open(headerDir+csvFilename, 'r', encoding='UTF-8') as csvFileObj: | |
readerObj = csv.reader(csvFileObj) | |
for row in readerObj: | |
if readerObj.line_num == 1: | |
continue | |
csvRows.append(row) | |
return csvRows | |
def csv_writer(data, path): | |
with open(path, "w", newline='') as csv_file: | |
writer = csv.writer(csv_file, delimiter=',') | |
for line in data: | |
writer.writerow(line) | |
return csv_file | |
def main(headerFile, outputHeaderDir): | |
# read threshold values from header.csv | |
headerData = readHeaderfile(headerFile) | |
# write headerdata to output.csv file | |
writeCsvData = csv_writer(headerData, outputHeaderDir) | |
if __name__ == "__main__": | |
headerDir = 'C:/Users/Andreas/PycharmProjects/lapio/headers/' | |
outputHeaderDir = 'C:/Users/Andreas/PycharmProjects/lapio/headers/output.csv' | |
main(headerDir, outputHeaderDir) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import csv | |
import os | |
import time | |
import datetime | |
import subprocess | |
import logging | |
from logging.handlers import TimedRotatingFileHandler | |
def getTimestamp(): | |
time = datetime.datetime.now() | |
dtString = time.strftime('%Y/%m/%d %H:%M:%S') | |
return dtString | |
def writer(datalist, headerlist, path): | |
with open(path, "a", newline='', encoding='UTF-8') as csv_file: | |
writer = csv.writer(csv_file) | |
for line in datalist: | |
if os.stat(path).st_size == 0: | |
for row in headerlist: | |
row = row.splitlines() | |
writer.writerow(row) | |
else: | |
writer.writerow([line]) | |
def getHeaderInfo(): | |
headerData = [ | |
'HEADERLIST', | |
'SITENAME:\t\t\t' 'Rovaniemi', | |
'MEASURMENT:\t\t\t' 'Pulsation', | |
'COORDINATES:\t\t' 'N66.75 E25.96', | |
'TIMEZONE:\t\t\t' 'UTC +02:00' | |
] | |
date = getTimestamp().split()[0] | |
headerData.append('DATE:\t\t\t\t' + date) | |
return headerData | |
def getTempOut(): | |
pass | |
def getTempIn(): | |
pass | |
def getTempCpu(): | |
pass | |
def getDiskStatus(): | |
ds = [] | |
cmd = subprocess.getoutput('df -h | grep /dev/sda5 \'{ print $1 }\' | cut -d\'/\' -f3') | |
ds = ds.append(cmd) | |
return ds | |
def getVoltageUps(): | |
pass | |
def getVoltageMeas(): | |
pass | |
def getFlowday(): | |
pass | |
def getFlowdayLast(): | |
pass | |
def main(): | |
# random loop for log testing | |
loop = 0 | |
while loop == 0: | |
''' This is a measurement PC software, that runs locally on every measurement station | |
Get all housekeeping data, same data used for status monitoring | |
getStatusRemote gets this apps outputfile and does all the reading and data comparing | |
''' | |
now = datetime.datetime.now() | |
datestring = now.strftime('%Y%m%d') | |
# Makes a new file every midnight with current days string in filename, change pc time to test!!!! | |
file = 'C:/Users/Andreas/PycharmProjects/lapio/headers/PUL_ROV_' + datestring + '_META.csv' | |
time.sleep(1) | |
datalist = [] | |
readHeader = getHeaderInfo() | |
timestamp = getTimestamp() | |
tempOut = getTempOut() | |
tempIn = getTempIn() | |
tempCpu = getTempCpu() | |
diskStatus = getDiskStatus() | |
voltageUps = getVoltageUps() | |
voltageMeas = getVoltageMeas() | |
flowday = getFlowday() | |
flowdayLast = getFlowdayLast() | |
datalist.append([timestamp, tempOut,tempIn,tempCpu,diskStatus,voltageUps,voltageMeas, flowday, flowdayLast]) | |
writeFile = writer(datalist,readHeader, file) | |
if __name__ == "__main__": | |
main() | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Date & Time(UT) Station Network (0=OK) Total disk size Spaceleft(G) Space left(%) | |
04.07.2017 05:47:32 Rovaniemi 0 23G 16G 27% | |
XX.XX.XXXX XX:XX:XX Oulu N N N N | |
04.07.2017 05:47:35 Jyvaskyla 0 41G 32G 17% |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html xmlns="http://www.w3.org/1999/html"> | |
<head> | |
<meta charset="utf-8" http-equiv="refresh" content="05"/> | |
<title>SGO</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
<script type="text/javascript" src="{{ url_for('static', filename='js/clock.js') }}"></script> | |
</head> | |
<body> | |
<h1 id="header">Main page</h1> | |
<h1 id="time">{{ time }}</h1> | |
</body> | |
<h2 class="section">All Stations ( page set to auto-refresh every 5seconds!)</h2> | |
<div id ="measurmentList"> | |
<table> | |
<!-- for i in statusinfo %} --> | |
<tr> | |
<!-- if measurment[i]['net'] > 0 or measurment[i][diskpace] < threshold[disk] %} --> | |
<th><a class="blackButton" href="{{ url_for('mag')}}"> Magnetometers</a></th> | |
<!-- elif something something %}--> | |
<th><a class="greenButton" href="{{ url_for('rio')}}">Riometers</a></th> | |
<!-- elif something something %}--> | |
<th><a class="yellowButton" href="{{ url_for('pul')}}">Pulsation</a></th> | |
<!-- else something %} --> | |
<th><a class="orangeButton" href="{{ url_for('vlf')}}">VLF</a> | |
<!-- endif %} | |
</tr> | |
<!-- { endfor %} --> | |
<tr> | |
<td colspan=4> | |
<div id="dateTimeClock">Loading</div> | |
</td> | |
</tr> | |
<tr> | |
<th><a class="redButton" href="{{ url_for('tomo')}}">Tomography</a></th> | |
<th><a class="greenButton" href="{{ url_for('seismo')}}">Seismometers</a></th> | |
<th><a class="greenButton" href="{{ url_for('radar')}}">R&R Receivers</a></th> | |
</tr> | |
</table> | |
</div> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>MAGNETOMETERS</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>MAGNETIC MEASURMENTS</h1> | |
</body> | |
</html> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html xmlns="http://www.w3.org/1999/html"> | |
<head> | |
<meta charset="utf-8" http-equiv="refresh" content="05"/> | |
<title>PULSATION</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
<script type="text/javascript" src="{{ url_for('static', filename='js/clock.js') }}"></script> | |
</head> | |
<body> | |
<h1 id="header">PULSATION STATUSPAGE</h1> | |
<h1 id="time">{{ time }}</h1> | |
<h1>Date&Time</h1> | |
<div id="dateTimeClock">Loading</div> | |
</body> | |
<h2 class="section">Pulsation ( page set to auto-refresh every 5seconds!</h2> | |
<table> | |
<tr class="tableheader"> | |
<td>Date&Time</td> | |
<td>Name</td> | |
<td>Network</td> | |
<td>Disk space (Gt)</td> | |
<td>Disk left (Gt)</td> | |
<td>Disk usage (%)</td> | |
</tr> | |
{% for p in pulkeys %} | |
<tr> | |
<td>{{ pul[p]['logtime']}}</td> | |
<td>{{ pul[p]['name']}}</td> | |
<td>{{ pul[p]['network'] }}</td> | |
<td>{{ pul[p]['diskspace'] }}</td> | |
<td>{{ pul[p]['spaceleft'] }}</td> | |
<td>{{ pul[p]['freespace'] }}</td> | |
</tr> | |
{% endfor %} | |
</table> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>RADAR AND RADIO RECEIVER</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>RADAR AND RADIO RECEIVER STATUSPAGE</h1> | |
</body> | |
</html> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>RIOMETERS</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>RIOMETER STATUSPAGE</h1> | |
</body> | |
</html> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>SEISMOMETERS</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>SEISMOMETER STATUSPAGE</h1> | |
</body> | |
</html> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>TOMOGRAPHY</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>TOMOGRAPHY STATUSPAGE</h1> | |
</body> | |
</html> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<title>VLF INSTRUMENTS</title> | |
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='style.css') }}" /> | |
<link href="https://fonts.googleapis.com/css?family=Roboto:400,900" rel="stylesheet"> | |
</head> | |
<body> | |
<h1>VLF INSTRUMENT STATUSPAGE</h1> | |
</body> | |
</html> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment