in modelServR/R/returnModel.R [45:120]
returnModel <- function(queryIn = jsonlite::toJSON(
list(
SELECT =list(COLUMN=c('pathogen','site_type','residence_census_tract')),
WHERE =list(COLUMN='pathogen', IN = 'all'),
GROUP_BY =list(COLUMN=c('site_type','residence_census_tract')),
SUMMARIZE=list(COLUMN='pathogen', IN= 'all')
)),
type = 'observed',
version = 'latest',
cloudDir = Sys.getenv('MODEL_STORE', '/home/rstudio/seattle_flu/test_model_store')){
basicConfig()
if(class(queryIn)== 'list'){
queryList <- queryIn
queryIn <- jsonlite::toJSON(queryIn)
} else if(class(queryIn)=='json'){
queryList <- jsonlite::fromJSON(queryIn)
}
modelID <- getModelIdFromQuery(queryList)
logdebug("ModelID: ", modelID)
modelDBfile<-paste(cloudDir,'modelDB.tsv',sep='/')
modelDB <- read.table(modelDBfile,header=TRUE,sep='\t',stringsAsFactors = FALSE)
modelDB$created <- as.POSIXct(modelDB$created,tz='UTC')
queryIdx <- gsub('\\\\','',modelDB$queryJSON) %in% gsub('\"','',as.character(queryIn))
typeIdx <- modelDB$type == type
matchIdx <- which(queryIdx & typeIdx)
if(version == 'latest'){
createdIdx <- which.max(modelDB$created[matchIdx])
} else {
version = as.Date(version)
createdIdx <- which.min(abs(version-modelDB$created))
}
matchIdx<-matchIdx[createdIdx]
if(!any(matchIdx)){
return('unknown model')
} else {
filename<-paste(cloudDir,modelDB$filename[matchIdx],sep='/')
}
if (format %in% c('csv','json')){
db <- loadModelFile(modelID, cloudDir)
dataOut<-list(query = queryList, type = type)
if(format == 'csv'){
return(dataOut)
} else {
# flat data format
dataOut$data <- db
# reformat for hierarchical JSON
# dataOut$data <-db %>% dplyr::group_by_at(queryList$GROUP_BY$COLUMN) %>% tidyr::nest(names(db))
return(jsonlite::toJSON(dataOut,pretty = TRUE, na="string"))
}
} else if(format == 'inla'){
model <- readRDS(paste(filename,'inla.RDS',sep='.'))
return(model)
}
}