Private
Public Access
1
0

async calctrimp task using microservice

This commit is contained in:
Sander Roosendaal
2019-12-23 21:25:00 +01:00
parent 7f6112462f
commit 2388edcf6d
2 changed files with 34 additions and 96 deletions

View File

@@ -38,6 +38,8 @@ from matplotlib import path
import grpc
import rowers.otw_power_calculator_pb2 as calculator_pb2
import rowers.otw_power_calculator_pb2_grpc as calculator_pb2_grpc
import rowers.rowing_workout_metrics_pb2 as metrics_pb2
import rowers.rowing_workout_metrics_pb2_grpc as metrics_pb2_grpc
from rowsandall_app.settings import SITE_URL
from rowsandall_app.settings_dev import SITE_URL as SITE_URL_DEV
@@ -609,105 +611,41 @@ def handle_calctrimp(id,
else:
engine = create_engine(database_url, echo=False)
try:
rowdata = rdata(csvfile=csvfilename)
except IOError:
tss = 0
normp = 0
trimp = 0
hrtss = 0
normv = 0
normw = 0
with grpc.insecure_channel(
target='localhost:50052',
options=[('grpc.lb_policy_name', 'pick_first'),
('grpc.enable_retries', 0), ('grpc.keepalive_timeout_ms',
10000)]
) as channel:
try:
rowdata = rdata(csvfile=csvfilename + '.csv')
except IOError:
try:
rowdata = rdata(csvfile=csvfilename + '.gz')
except IOError:
return 0
grpc.channel_ready_future(channel).result(timeout=10)
except grpc.FutureTimeoutError:
return 0
df = rowdata.df
try:
df['deltat'] = df[' ElapsedTime (sec)'].diff().abs()
except KeyError:
return 0
df2 = df.copy()
df2['time'] = df2[' ElapsedTime (sec)']
df2['time'] = df2['time'].apply(
lambda x:safetimedelta(x)
stub = metrics_pb2_grpc.MetricsStub(channel)
req = metrics_pb2.WorkoutMetricsRequest(
filename = csvfilename,
ftp=ftp,
sex=sex,
hrftp=hrftp,
hrmax=hrmax,
hrmin=hrmin,
)
response = stub.CalcMetrics(req,timeout=60)
duration = df['TimeStamp (sec)'].max()-df['TimeStamp (sec)'].min()
df2 = df2.resample('1s',on='time').mean()
df2.fillna(method='ffill',inplace=True)
df2 = df2.rolling(30).mean()
tss = response.tss
normp = response.normp
trimp = response.trimp
normv = response.normv
normw = response.normw
df2[' Power (watts)'] = df2[' Power (watts)'].abs()
df2['pwr4'] = df2[' Power (watts)']**(4.0)
# pwr4mean = wavg(df,'pwr4','deltat')
pwr4mean = df2['pwr4'].mean()
pwrmean = df2[' Power (watts)'].mean()
# pwrmean = wavg(df,' Power (watts)','deltat')
if pwr4mean > 0:
normp = (pwr4mean)**(0.25)
else:
normp = pwrmean
intensityfactor = normp/float(ftp)
tss = 100.*((duration*normp*intensityfactor)/(3600.*ftp))
if sex == 'male':
f = 1.92
else:
f = 1.67
dt = df['TimeStamp (sec)'].diff()/60.
hrr = (df[' HRCur (bpm)']-hrmin)/(hrmax-hrmin)
hrrftp = (hrftp-hrmin)/float(hrmax-hrmin)
trimp1hr = 60.*hrrftp*0.64*np.exp(f*hrrftp)
trimpdata = dt*hrr*0.64*np.exp(f*hrr)
trimp = trimpdata.sum()
hrtss = 100.*trimp/trimp1hr
pp = 8.0
df['v4'] = df[' AverageBoatSpeed (m/s)']**(pp)
v4mean = wavg(df,'v4','deltat')
normv = v4mean**(1./pp)
try:
df['w4'] = df['driveenergy']**(pp)
w4mean = wavg(df,'w4','deltat')
normw = w4mean**(1./pp)
except KeyError:
normw = 0
if not np.isfinite(normv):
normv = 500./120.
if not np.isfinite(normw):
normw = 0
try:
dum = int(tss)
except ValueError:
tss = 0
try:
dum = int(normp)
except ValueError:
normp = 0
try:
dump = int(trimp)
except ValueError:
trimp = 0
try:
dump = int(hrtss)
except ValueError:
hrtss = 0
query = 'UPDATE rowers_workout SET rscore = {tss}, normp = {normp}, trimp={trimp}, hrtss={hrtss}, normv={normv}, normw={normw} WHERE id={id}'.format(
tss = int(tss),
@@ -1603,7 +1541,7 @@ def handle_otwsetpower(self,f1, boattype, weightvalue,
try:
rowdata = rdata(csvfile)
except IOError:
rowdata = rdata(csvfile)
rowdata = rdata(csvfile)
else:
boatfile = {