async calctrimp task using microservice
This commit is contained in:
128
rowers/tasks.py
128
rowers/tasks.py
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user