/*****************************************************************************/
/*                                                                           */
/*                             exampleQueries.txt                            */
/*                                                                           */
/* (c) 2005 by the Board of Trustees of the Leland Stanford, Jr., University */
/*                            All Rights Reserved                            */
/*       Produced by Jacek Becla for Stanford University under contract      */
/*              DE-AC02-76SF00515 with the Department of Energy              */
/*****************************************************************************/

// $Id: exampleQueries.txt,v 1.11 2005/03/25 00:58:11 becla Exp $



###################################################
############### show current status ###############
################################################### 


## current number of unique users:
SELECT COUNT(DISTINCT userId) 
FROM   rtOpenedSessions;


## current number of unique opened files
SELECT COUNT(DISTINCT pathId)
FROM   rtOpenedFiles;

## current number of non-unique opened files
SELECT COUNT(*)
FROM   rtOpenedFiles;


## current number of unique opened sessions
SELECT COUNT(DISTINCT CONCAT(pId, clientHId))
FROM   rtOpenedSessions;


## change of number of jobs [in #jobs and in %]
SELECT jobs, jobs_p FROM rtChanges;


 # 1st query
SELECT @lastMin:=min, 
       @lastValue:=noJobs
FROM   rtHour
WHERE  min = (SELECT MAX(min) FROM rtHour);
 # 2nd query: returns change in number of jobs
SELECT @lastValue-noJobs AS dif
FROM   rtHour
WHERE  min = SUBTIME(@lastMin, "00:01:00");
 # 3rd query: returns change in %
## change of number of jobs [in %]
SELECT 100*(@lastValue-noJobs)/@lastValue as difPerc
FROM rtHour
WHERE min = SUBTIME(@lastMin, "00:01:00");



## select day's range of noJobs
select MIN(noJobs), MAX(noJobs) from rtDay;



## current number of non-unique opened sessions
SELECT COUNT(*)
FROM   rtOpenedSessions;


## current number of unique active client hosts
SELECT COUNT(DISTINCT clientHId) as noClients
FROM   rtOpenedSessions;


## current number of unique active server hosts
SELECT COUNT(DISTINCT serverHId) as noServers
FROM   rtOpenedSessions;


###################################################
############ for plotting, time window ############
################################################### 

# all "per hour", to get "per day" replace 
# '%Y-%m-%d %H' with '%Y-%m-%d'


## unique users per hour



## non-unique closed files per hour
SELECT DATE_FORMAT(closeT, '%Y-%m-%d %H') AS hour,
       COUNT(*) AS noClosedFiles
FROM   rtClosedFiles
       GROUP BY TIMEDIFF(NOW(),DATE_FORMAT(closeT, '%Y-%m-%d %H'))
       ORDER BY hour;



## unique closed sessions per hour
SELECT DATE_FORMAT(disconnectT, '%Y-%m-%d %H') AS date, 
       COUNT(TIMEDIFF(NOW(), DATE_FORMAT(disconnectT, '%Y-%m-%d %H'))) AS rtClosedSessions
FROM   rtClosedSessions
       GROUP BY TIMEDIFF(NOW(), DATE_FORMAT(disconnectT, '%Y-%m-%d %H'))
       ORDER BY disconnectT;



## volume read per hour



## volume written per hour


## total duration of all the jobs per hour



###################################################
################# data for tables #################
################################################### 

## top 10: number of jobs and number of uniqueFiles per user
SELECT userName,
       COUNT(DISTINCT CONCAT(pId, clientHId) ) AS nJobs,
       COUNT(DISTINCT pathId) AS nFiles
FROM   rtOpenedSessions, users, rtOpenedFiles 
WHERE  userId=users.id AND
       rtOpenedSessions.id=rtOpenedFiles.sessionId
       GROUP BY userId
       ORDER BY nJobs
       DESC
       LIMIT 10;


## top 10: number of jobs per user
SELECT userName, 
       COUNT(DISTINCT CONCAT(pId, clientHId) ) AS nJobs,
FROM   rtOpenedSessions, users
WHERE  userId=users.id 
       GROUP BY userId 
       ORDER BY nJobs 
       DESC
       LIMIT 10;


## top 10: number of files per user
SELECT userName, 
       COUNT(DISTINCT pathId) AS nFiles 
FROM   rtOpenedSessions, users, rtOpenedFiles 
WHERE  userId=users.id AND 
       rtOpenedSessions.id=rtOpenedFiles.sessionId 
       GROUP BY userId 
       ORDER BY nFiles 
       DESC
       LIMIT 10;


## top 5 skims (max no files)
SELECT skimNames.name AS skimName, 
       COUNT(*) AS noFiles 
from   paths, skimNames 
WHERE  skimNames.id=skimId 
       GROUP BY skimId
       ORDER BY noFiles
       DESC
       LIMIT 5;

## top 5 skims (max no sessions)
SELECT skimNames.name AS skimName, 
       COUNT(DISTINCT os.id) AS noJobs 
from   paths, skimNames, rtOpenedSessions os, rtOpenedFiles of
WHERE  skimNames.id=paths.skimId AND
       paths.id = of.pathId AND
       of.sessionId = os.id
       GROUP BY skimId
       ORDER BY noJobs
       DESC
       LIMIT 5;

## top 5 skims (max no users)
SELECT skimNames.name AS skimName, 
       COUNT(DISTINCT os.userId) AS noUsers 
from   paths, skimNames, rtOpenedSessions os, rtOpenedFiles of
WHERE  skimNames.id=paths.skimId AND
       paths.id = of.pathId AND
       of.sessionId = os.id
       GROUP BY skimId
       ORDER BY noUsers
       DESC
       LIMIT 5;


## top 5 skims (max nofiles, no sessions, no users, sorted by max no files)
SELECT skimNames.name AS skimName, 
       COUNT(DISTINCT os.id) AS noJobs,
       COUNT(DISTINCT of.id) AS noFiles,
       COUNT(DISTINCT os.userId) AS noUsers 
FROM   paths, skimNames, rtOpenedSessions os, rtOpenedFiles of
WHERE  skimNames.id=paths.skimId AND
       paths.id = of.pathId AND
       of.sessionId = os.id
       GROUP BY skimId
       ORDER BY noFiles
       DESC
       LIMIT 5;


## hottest files:

SELECT paths.path AS filePath,
       COUNT(DISTINCT of.sessionId) AS noJobs,
       COUNT(DISTINCT os.userId) AS noUsers
FROM   paths, rtOpenedFiles of, rtOpenedSessions os
WHERE  paths.id = of.pathId AND
       of.sessionId = os.id
       GROUP BY of.id
       ORDER BY noJobs 
       DESC
       LIMIT 5;

      
## per data type (SP,PR, SPskims, PRskims)
SELECT fileTypes.name AS type,
       COUNT(DISTINCT os.id) AS noJobs,
       COUNT(DISTINCT of.id) AS noFiles,
       COUNT(DISTINCT os.userId) AS noUsers
FROM   paths, fileTypes, rtOpenedSessions os, rtOpenedFiles of
WHERE  fileTypes.id=paths.skimId AND
       paths.id = of.pathId AND
       of.sessionId = os.id
       GROUP BY skimId
       ORDER BY noFiles
       DESC;


###################################################
################# data for buttons ################
################################################### 

## show all currently active users
SELECT DISTINCT userName
FROM   users, rtOpenedSessions
WHERE  userId=users.id
ORDER BY userName;



## show all server machines with at least one opened session
SELECT DISTINCT hostName 
FROM   hosts, rtOpenedSessions 
WHERE  serverHId=hosts.id
ORDER BY hostName;


## show all currently active client machines
SELECT DISTINCT hostName 
FROM   hosts, rtOpenedSessions 
WHERE  clientHId=hosts.id
ORDER BY hostName;



## show all skims 
???


## show all currently opened files 
SELECT DISTINCT path 
FROM   paths, rtOpenedFiles 
WHERE  pathId=paths.id
ORDER BY path;



###################################################
########## detailed info about one user ###########
################################################### 

#select user id, then use it in all queries:
SELECT id FROM users WHERE userName = 'blablabla';


current status
==============

## number of opened files
SELECT COUNT(DISTINCT pathId)
FROM   rtOpenedSessions os, rtOpenedFiles of, users
WHERE  of.sessionId=os.id AND
       os.userId=users.id AND
       userName='blabla';


## number of opened sessions
SELECT COUNT(*) 
FROM   rtOpenedSessions os, users 
WHERE  os.userId=users.id AND
       userName='blabla';


## number of client hosts 
SELECT COUNT(DISTINCT clientHId) 
FROM   rtOpenedSessions os, users 
WHERE  os.userId=users.id AND
       userName='blabla';



## list opened files
SELECT path 
FROM   rtOpenedSessions os, rtOpenedFiles of, users, paths
WHERE  paths.id=of.pathId AND
       of.sessionId=os.id AND
       os.userId=users.id AND
       userName='rahmi';


## list jobs
SELECT hosts.hostName AS clientHost, 
       pId
FROM   rtOpenedSessions os, users, hosts
WHERE  os.userId=users.id AND
       userName='blabla' AND
       os.clientHId=hosts.id
       ORDER BY clientHost;


time window:
============

## number of accessed (closed) files in the past hour
SELECT @t1+@t2
FROM   (SELECT @t1:=COUNT(*) 
        FROM   users, rtClosedFiles cf, rtOpenedSessions os
        WHERE  users.id=os.userId AND
               os.id=cf.sessionId) AS X1,
       (SELECT @t2:=COUNT(*) 
        FROM   users, rtClosedFiles cf, rtClosedSessions cs
        WHERE  users.id=cs.userId AND
               cs.id=cf.sessionId) AS X2;

     


## number of closed sessions


## total duration of all jobs


## peak number of simulteneous jobs


## volume read


## volume written




###################################################
########## detailed info about one server #########
################################################### 


[to be filled]

###################################################
##### detailed info about one client machine ######
################################################### 


[to be filled]


###################################################
########### detailed info about one skim ##########
################################################### 


[to be filled]


###################################################
########### detailed info about one file ##########
################################################### 


[to be filled]
