Skip to content

Commit bdbc811

Browse files
author
Kenneth Daily
authored
Merge pull request #19 from Sage-Bionetworks/develop
Develop
2 parents 95ded2a + 5df50c1 commit bdbc811

File tree

5 files changed

+102
-32
lines changed

5 files changed

+102
-32
lines changed

inst/lib.R

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ mytheme <- ggplot2::theme_bw() + ggplot2::theme(axis.text=ggplot2::element_text(
1111
# doQuery <- function(con, template, projectId, beginTimestamp, endTimestamp) {
1212
# q.browse <- sprintf(template, projectId, beginTimestamp, endTimestamp)
1313

14-
doQuery <- function(con, template, projectId, date) {
14+
doQuery <- function(conn, template, projectId, date) {
1515
message(sprintf("%s", date))
1616
q.browse <- sprintf(template, date, date %m+% months(1))
1717

18-
DBI::dbGetQuery(conn = con, statement=q.browse)
18+
DBI::dbGetQuery(conn = conn, statement=q.browse)
1919

2020
}
2121

@@ -40,27 +40,47 @@ processQuery <- function(data) {
4040
queryData
4141
}
4242

43-
getData <- function(con, qTemplate, projectId, timestampBreaksDf) {
43+
createTempTable <- function(conn, projectId, parentIds=NULL) {
4444

45+
if (is.null(parentIds)) {
46+
q.create_temp <- "CREATE TEMPORARY TABLE PROJECT_STATS SELECT ID, MAX(TIMESTAMP) AS TIMESTAMP FROM NODE_SNAPSHOT WHERE PROJECT_ID = %s GROUP BY ID;"
47+
statement <- sprintf(q.create_temp, projectId)
48+
} else {
49+
parentIdsSQL <- sprintf("(%s)", paste(parentIds, collapse=","))
50+
q.create_temp <- "CREATE TEMPORARY TABLE PROJECT_STATS SELECT ID, MAX(TIMESTAMP) AS TIMESTAMP FROM NODE_SNAPSHOT WHERE PROJECT_ID = %s AND PARENT_ID IN %s GROUP BY ID;"
51+
statement <- sprintf(q.create_temp, projectId, parentIdsSQL)
52+
}
53+
54+
create <- DBI::dbSendQuery(conn=conn,
55+
statement=statement)
56+
}
57+
58+
dropTempTable <- function(conn) {
59+
DBI::dbSendQuery(conn=conn, statement='DROP TABLE PROJECT_STATS;')
60+
}
61+
62+
getData <- function(conn, qTemplate, projectId, timestampBreaksDf, parentIds=NULL) {
4563
maxDate <- max(timestampBreaksDf$date)
4664

47-
q.create_temp <- "CREATE TEMPORARY TABLE PROJECT_STATS SELECT ID, MAX(TIMESTAMP) AS TIMESTAMP FROM NODE_SNAPSHOT WHERE PROJECT_ID = %s GROUP BY ID;"
48-
create <- DBI::dbSendQuery(conn=con,
49-
statement=sprintf(q.create_temp, projectId))
65+
# q.create_temp <- "CREATE TEMPORARY TABLE PROJECT_STATS SELECT ID, MAX(TIMESTAMP) AS TIMESTAMP FROM NODE_SNAPSHOT WHERE PROJECT_ID = %s GROUP BY ID;"
66+
# create <- DBI::dbSendQuery(conn=con,
67+
# statement=sprintf(q.create_temp, projectId))
68+
create <- createTempTable(conn=conn, projectId=projectId, parentIds=parentIds)
69+
res <- tryCatch(plyr::ddply(timestampBreaksDf, plyr::.(month, year),
70+
function (x) doQuery(conn=conn,
71+
template=qTemplate,
72+
projectId=projectId,
73+
date=x$date)),
74+
error=function(e) dropTempTable(conn=conn))
5075

51-
res <- plyr::ddply(timestampBreaksDf, plyr::.(month, year),
52-
function (x) doQuery(con=con,
53-
template=qTemplate,
54-
projectId=projectId,
55-
date=x$date))
76+
dropTempTable(conn=conn)
5677

57-
foo <- DBI::dbSendQuery(conn=con, statement='DROP TABLE PROJECT_STATS;')
78+
# foo <- DBI::dbSendQuery(conn=con, statement='DROP TABLE PROJECT_STATS;')
5879

5980
res
6081
}
6182

6283
getTeamMemberDF <- function(teamId) {
63-
6484
totalNumberOfResults <- 1000
6585
offset <- 0
6686
limit <- 50
@@ -307,4 +327,21 @@ topNEntities <- function(queryData, allUsers, topN=20) {
307327
dplyr::top_n(topN, n) %>%
308328
dplyr::arrange(-n) %>%
309329
dplyr::select(n)
310-
}
330+
}
331+
332+
REPORT_TEMPLATES <- c("report"="../report.Rmd")
333+
334+
generateAndStore <- function(myParams, reportType) {
335+
htmlFileName <- paste0(myParams[['projectId']], "_", reportType, "_",
336+
lubridate::today(), ".html")
337+
338+
outputFileName <- paste0(tempdir(), "/", htmlFileName)
339+
340+
rmarkdown::render(input=REPORT_TEMPLATES[[reportType]],
341+
output_file=outputFileName,
342+
params=myParams)
343+
344+
synStore(File(outputFileName,
345+
name="Usage Statistics",
346+
parentId=parentId))
347+
}

inst/report.Rmd

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ params:
88
useTeamGrouping: !r TRUE
99
aclTeamOrder: !r c('syn2775243')
1010
queryDataFile: !r NA
11+
dataOutput: !r NA
1112
---
1213

1314
```{r libs, echo=FALSE, warning=FALSE, message=FALSE}
@@ -29,11 +30,11 @@ knitr::opts_chunk$set(
2930
tidy = FALSE,
3031
fig.width=20)
3132
32-
qPageviewTemplate <- 'select CLIENT,ENTITY_ID,CONVERT(AR.TIMESTAMP, CHAR) AS TIMESTAMP,DATE,USER_ID,NODE_TYPE,N.NAME from ACCESS_RECORD AR, PROCESSED_ACCESS_RECORD PAR, NODE_SNAPSHOT N, PROJECT_STATS NODE where AR.RESPONSE_STATUS=200 AND AR.TIMESTAMP > unix_timestamp("%s")*1000 AND AR.TIMESTAMP < unix_timestamp("%s")*1000 AND AR.SESSION_ID = PAR.SESSION_ID and AR.TIMESTAMP = PAR.TIMESTAMP and PAR.ENTITY_ID = NODE.ID AND N.ID = NODE.ID and N.TIMESTAMP = NODE.TIMESTAMP and CLIENT = "WEB" AND (PAR.NORMALIZED_METHOD_SIGNATURE IN ("GET /entity/#/bundle", "GET /entity/#/version/#/bundle", "GET /entity/#/wiki2", "GET /entity/#/wiki2/#"));'
33-
34-
qDownloadTemplate <- 'select CLIENT,ENTITY_ID,CONVERT(AR.TIMESTAMP, CHAR) AS TIMESTAMP,DATE,USER_ID,NODE_TYPE,N.NAME from ACCESS_RECORD AR, PROCESSED_ACCESS_RECORD PAR, NODE_SNAPSHOT N, PROJECT_STATS NODE where AR.TIMESTAMP > unix_timestamp("%s")*1000 AND AR.TIMESTAMP < unix_timestamp("%s")*1000 and (AR.RESPONSE_STATUS IN (200, 307)) AND AR.SESSION_ID = PAR.SESSION_ID and AR.TIMESTAMP = PAR.TIMESTAMP and PAR.ENTITY_ID = NODE.ID and N.ID = NODE.ID AND N.TIMESTAMP = NODE.TIMESTAMP and (PAR.NORMALIZED_METHOD_SIGNATURE IN ("GET /entity/#/file", "GET /entity/#/version/#/file"));'
33+
qPageviewTemplate <- 'select ENTITY_ID,CONVERT(AR.TIMESTAMP, CHAR) AS TIMESTAMP,DATE,USER_ID,NODE_TYPE,N.NAME from ACCESS_RECORD AR, PROCESSED_ACCESS_RECORD PAR, NODE_SNAPSHOT N, PROJECT_STATS NODE where AR.RESPONSE_STATUS=200 AND AR.TIMESTAMP > unix_timestamp("%s")*1000 AND AR.TIMESTAMP < unix_timestamp("%s")*1000 AND AR.SESSION_ID = PAR.SESSION_ID and AR.TIMESTAMP = PAR.TIMESTAMP and PAR.ENTITY_ID = NODE.ID AND N.ID = NODE.ID and N.TIMESTAMP = NODE.TIMESTAMP and CLIENT = "WEB" AND (PAR.NORMALIZED_METHOD_SIGNATURE IN ("GET /entity/#/bundle", "GET /entity/#/version/#/bundle", "GET /entity/#/wiki2", "GET /entity/#/wiki2/#"));'
3534
35+
qDownloadTemplate <- 'select ENTITY_ID,CONVERT(AR.TIMESTAMP, CHAR) AS TIMESTAMP,DATE,USER_ID,NODE_TYPE,N.NAME from ACCESS_RECORD AR, PROCESSED_ACCESS_RECORD PAR, NODE_SNAPSHOT N, PROJECT_STATS NODE where AR.TIMESTAMP > unix_timestamp("%s")*1000 AND AR.TIMESTAMP < unix_timestamp("%s")*1000 and (AR.RESPONSE_STATUS IN (200, 307)) AND AR.SESSION_ID = PAR.SESSION_ID and AR.TIMESTAMP = PAR.TIMESTAMP and PAR.ENTITY_ID = NODE.ID and N.ID = NODE.ID AND N.TIMESTAMP = NODE.TIMESTAMP and (PAR.NORMALIZED_METHOD_SIGNATURE IN ("GET /entity/#/file", "GET /entity/#/version/#/file"));'
3636
37+
qFDRTemplate <- 'SELECT FDR.ASSOCIATION_OBJECT_ID AS ENTITY_ID, CONVERT(FDR.TIMESTAMP , CHAR) AS TIMESTAMP, DATE_FORMAT(from_unixtime(PROJECT_STATS.TIMESTAMP / 1000), "%%Y-%%m-%%e") AS DATE, FDR.USER_ID, N.NODE_TYPE, N.NAME FROM FILE_DOWNLOAD_RECORD FDR, NODE_SNAPSHOT N, PROJECT_STATS WHERE FDR.TIMESTAMP > unix_timestamp("%s")*1000 AND FDR.TIMESTAMP < unix_timestamp("%s")*1000 AND N.ID = PROJECT_STATS.ID AND PROJECT_STATS.ID = FDR.ASSOCIATION_OBJECT_ID AND FDR.ASSOCIATION_OBJECT_TYPE = "FileEntity" AND N.TIMESTAMP = PROJECT_STATS.TIMESTAMP;'
3738
```
3839

3940
```{r config}
@@ -67,26 +68,35 @@ timestampBreaksDf <- makeDateBreaks(nMonths) %>% dplyr::arrange(date)
6768
```
6869

6970
```{r domysqlquery}
70-
queryDataPageviews <- getData(con=con, qTemplate=qPageviewTemplate,
71+
queryDataPageviews <- getData(conn=con, qTemplate=qPageviewTemplate,
7172
projectId=projectId,
7273
timestampBreaksDf=timestampBreaksDf)
7374
74-
7575
queryDataPageviewsProcessed <- queryDataPageviews %>%
7676
dplyr::mutate(recordType='pageview') %>%
7777
processQuery()
7878
79-
queryDataDownloads <- getData(con=con, qTemplate=qDownloadTemplate,
79+
queryDataDownloads <- getData(conn=con, qTemplate=qDownloadTemplate,
8080
projectId=projectId,
8181
timestampBreaksDf=timestampBreaksDf)
8282
8383
queryDataDownloadsProcessed <- queryDataDownloads %>%
8484
dplyr::mutate(recordType='download') %>%
8585
processQuery()
8686
87-
queryData <- rbind(queryDataPageviewsProcessed, queryDataDownloadsProcessed)
87+
queryDataFDR <- getData(conn=con, qTemplate=qFDRTemplate,
88+
projectId=projectId,
89+
timestampBreaksDf=timestampBreaksDf)
90+
91+
queryDataFDRProcessed <- queryDataFDR %>%
92+
dplyr::mutate(recordType='download') %>%
93+
processQuery()
8894
95+
queryData <- rbind(queryDataPageviewsProcessed, queryDataDownloadsProcessed, queryDataFDRProcessed)
8996
97+
if (!is.na(params$dataOutput)) {
98+
write.csv(queryData, file=params$dataOutput, row.names = FALSE)
99+
}
90100
```
91101
### Activity on Synapse project `r proj@properties$name` (`r params$projectId`) from `r min(timestampBreaksDf$date)` to `r max(timestampBreaksDf$date)`.
92102

inst/scripts/manual_AMPAD.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ rmarkdown::render(input=templates[[reportType]],
2020
params = myParams)
2121

2222
htmlFile <- synStore(File(paste0("../", htmlFileName),
23+
name="Usage Statistics",
2324
parentId=parentId))

inst/scripts/manual_CSBC_all.R

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
library(synapseClient)
2+
synapseLogin()
3+
4+
templates <- c("report"="../report.Rmd")
5+
reportType <- "report"
6+
7+
res <- synTableQuery("select id from syn10142562")
8+
9+
parentId <- 'syn10322050'
10+
11+
for (id in res@values$id) {
12+
13+
message(sprintf("Processing Project %s", id))
14+
15+
projectId <- id
16+
17+
myParams <- list(projectId=projectId,
18+
nMonths=NA,
19+
aclTeamOrder=c(),
20+
useTeamGrouping=FALSE)
21+
22+
htmlFileName <- paste0(myParams[['projectId']], "_", reportType, "_",
23+
lubridate::today(), ".html")
24+
25+
rmarkdown::render(input=templates[[reportType]],
26+
output_file=htmlFileName,
27+
params = myParams)
28+
29+
htmlFile <- synStore(File(paste0("../", htmlFileName),
30+
parentId=parentId))
31+
}

inst/scripts/manual_PCBC.R

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
library(synapseClient)
22
synapseLogin()
3+
source("../lib.R")
34

4-
templates <- c("report"="../report.Rmd")
55
reportType <- "report"
6-
76
projectId <- 'syn1773109'
87
parentId <- 'syn4892835'
98

@@ -12,12 +11,4 @@ myParams <- list(projectId=projectId,
1211
aclTeamOrder=c(2224090, 3319054, 273957, projectId),
1312
useTeamGrouping=FALSE)
1413

15-
htmlFileName <- paste0(myParams[['projectId']], "_", reportType, "_",
16-
lubridate::today(), ".html")
17-
18-
rmarkdown::render(input=templates[[reportType]],
19-
output_file=htmlFileName,
20-
params = myParams)
21-
22-
htmlFile <- synStore(File(paste0("../", htmlFileName),
23-
parentId=parentId))
14+
generateAndStore(myParams, reportType)

0 commit comments

Comments
 (0)