Skip to content

Commit

Permalink
Merge branch 'bareos-15.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
Marco van Wieringen committed Oct 2, 2015
2 parents 6b3ab05 + ef510dd commit df58b53
Show file tree
Hide file tree
Showing 11 changed files with 160 additions and 147 deletions.
4 changes: 2 additions & 2 deletions src/cats/protos.h
Expand Up @@ -122,8 +122,8 @@ bool db_get_ndmp_environment_string(JCR *jcr, B_DB *mdb, JOB_DBR *jr,
void db_list_pool_records(JCR *jcr, B_DB *db, POOL_DBR *pr,
OUTPUT_FORMATTER *sendit, e_list_type type);
void db_list_job_records(JCR *jcr, B_DB *db, JOB_DBR *jr, const char *range,
int jobstatus, utime_t since_time,
OUTPUT_FORMATTER *sendit, e_list_type type);
const char *clientname, int jobstatus, const char *volumename,
utime_t since_time, OUTPUT_FORMATTER *sendit, e_list_type type);
void db_list_job_totals(JCR *jcr, B_DB *db, JOB_DBR *jr,
OUTPUT_FORMATTER *sendit);
void db_list_files_for_job(JCR *jcr, B_DB *db, uint32_t jobid,
Expand Down
58 changes: 44 additions & 14 deletions src/cats/sql_cmds.c
Expand Up @@ -74,20 +74,50 @@ const char *fill_jobhisto =
/* For ua_update.c */
const char *list_pool = "SELECT * FROM Pool WHERE PoolId=%s";

/* For ua_output.c */
const char *client_backups =
"SELECT DISTINCT Job.JobId,Client.Name as Client,Level,StartTime,"
"JobStatus,JobFiles,JobBytes,VolumeName,MediaType,FileSet,Media.Enabled as Enabled"
" FROM Client,Job,JobMedia,Media,FileSet"
" WHERE Client.Name='%s'"
" AND (%s)"
" AND Type='B'"
" AND Client.ClientId=Job.ClientId"
" AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId"
" AND Job.FileSetId=FileSet.FileSetId"
"%s"
" ORDER BY Job.StartTime"
"%s";
/*
* For sql_list.c and ua_output.c
*
* "WHERE JobId > 0" is a dummy where clause,
* to make it easier to extend the filter
* (all filters starts with "AND ...")
* JOIN with Media is required for filter to Media.Volumename.
*/
const char *list_jobs =
"SELECT "
"Job.JobId,Job.Name, "
"Client.Name as Client, "
"Job.StartTime,Job.Type,Job.Level,Job.JobFiles,Job.JobBytes,Job.JobStatus "
"FROM Job "
"LEFT JOIN Client ON Client.ClientId=Job.ClientId "
"LEFT JOIN JobMedia ON JobMedia.JobId=Job.JobId "
"LEFT JOIN Media ON JobMedia.MediaId=Media.MediaId "
"LEFT JOIN FileSet ON FileSet.FileSetId=Job.FileSetId "
"WHERE Job.JobId > 0 "
"%s "
"ORDER BY StartTime%s";

const char *list_jobs_long =
"SELECT "
"Job.JobId, Job.Job, Job.Name, "
"Job.PurgedFiles, Job.Type, Job.Level, "
"Job.ClientId, Client.Name as Client, "
"Job.JobStatus,"
"Job.SchedTime, Job.StartTime, Job.EndTime, Job.RealEndTime, Job.JobTDate, "
"Job.VolSessionId, Job.VolSessionTime, "
"Job.JobFiles, Job.JobBytes, Job.JobErrors, Job.JobMissingFiles, "
"Job.PoolId, Pool.Name as PoolName,"
"Media.VolumeName, "
"Job.PriorJobId, "
"Job.FileSetId, FileSet.FileSet "
"FROM Job "
"LEFT JOIN Client ON Client.ClientId=Job.ClientId "
"LEFT JOIN Pool ON Pool.PoolId=Job.PoolId "
"LEFT JOIN JobMedia ON JobMedia.JobId=Job.JobId "
"LEFT JOIN Media ON JobMedia.MediaId=Media.MediaId "
"LEFT JOIN FileSet ON FileSet.FileSetId=Job.FileSetId "
"WHERE Job.JobId > 0 "
"%s "
"ORDER BY StartTime%s";

/* ====== ua_prune.c */

Expand Down
3 changes: 2 additions & 1 deletion src/cats/sql_cmds.h
Expand Up @@ -23,7 +23,8 @@

extern const char CATS_IMP_EXP *get_restore_objects;
extern const char CATS_IMP_EXP *fill_jobhisto;
extern const char CATS_IMP_EXP *client_backups;
extern const char CATS_IMP_EXP *list_jobs;
extern const char CATS_IMP_EXP *list_jobs_long;
extern const char CATS_IMP_EXP *list_pool;
extern const char CATS_IMP_EXP *drop_deltabs[];
extern const char CATS_IMP_EXP *create_delindex;
Expand Down
125 changes: 36 additions & 89 deletions src/cats/sql_list.c
Expand Up @@ -354,109 +354,56 @@ void db_list_joblog_records(JCR *jcr, B_DB *mdb, uint32_t JobId,

/*
* List Job record(s) that match JOB_DBR
*
* Currently, we return all jobs or if jr->JobId is set,
* only the job with the specified id.
*/
void db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, const char *range,
int jobstatus, utime_t since_time,
OUTPUT_FORMATTER *sendit, e_list_type type)
const char *clientname, int jobstatus, const char *volumename,
utime_t since_time, OUTPUT_FORMATTER *sendit, e_list_type type)
{
char ed1[50];
char esc[MAX_ESCAPE_NAME_LENGTH];
POOL_MEM jobstatusfilter(PM_MESSAGE),
schedtimefilter(PM_MESSAGE);
POOL_MEM temp(PM_MESSAGE),
selection(PM_MESSAGE),
criteria(PM_MESSAGE);
char dt[MAX_TIME_LENGTH];


bstrutime(dt, sizeof(dt), since_time);

if (jr->JobId > 0) {
temp.bsprintf(" AND Job.JobId=%s", edit_int64(jr->JobId, ed1));
pm_strcat(selection, temp.c_str());
}
if (jr->Name[0] != 0) {
mdb->db_escape_string(jcr, esc, jr->Name, strlen(jr->Name));
temp.bsprintf( " AND Job.Name = '%s' ", esc);
pm_strcat(selection, temp.c_str());
}
if (clientname) {
temp.bsprintf(" AND Client.Name = '%s' ", clientname);
pm_strcat(selection, temp.c_str());
}
if (jobstatus) {
temp.bsprintf(" AND Job.JobStatus = '%c' ", jobstatus);
pm_strcat(selection, temp.c_str());
}
if (volumename) {
temp.bsprintf(" AND Media.Volumename = '%s' ", volumename);
pm_strcat(selection, temp.c_str());
}
if (since_time) {
temp.bsprintf(" AND Job.SchedTime > '%s' ", dt);
pm_strcat(selection, temp.c_str());
}

db_lock(mdb);
if (type == VERT_LIST) {

if (jobstatus) {
jobstatusfilter.bsprintf(" WHERE JobStatus = '%c'", jobstatus);
if (since_time) {
schedtimefilter.bsprintf(" AND SchedTime > '%s' ", dt);
}
} else if (since_time) {
schedtimefilter.bsprintf(" WHERE SchedTime > '%s' ", dt);
}

if (jr->JobId == 0 && jr->Job[0] == 0) {
Mmsg(mdb->cmd,
"SELECT JobId,Job,Job.Name,PurgedFiles,Type,Level,"
"Job.ClientId,Client.Name as ClientName,JobStatus,SchedTime,"
"StartTime,EndTime,RealEndTime,JobTDate,"
"VolSessionId,VolSessionTime,JobFiles,JobBytes,JobErrors,"
"JobMissingFiles,Job.PoolId,Pool.Name as PoolName,PriorJobId,"
"Job.FileSetId,FileSet.FileSet "
"FROM Job "
"LEFT JOIN Client ON Client.ClientId=Job.ClientId "
"LEFT JOIN Pool ON Pool.PoolId=Job.PoolId "
"LEFT JOIN FileSet ON FileSet.FileSetId=Job.FileSetId "
" %s "
" %s "
"ORDER BY StartTime%s",
jobstatusfilter.c_str(),
schedtimefilter.c_str(),
Mmsg(mdb->cmd, list_jobs_long,
selection.c_str(),
range);
} else { /* single record */
Mmsg(mdb->cmd,
"SELECT JobId,Job,Job.Name,PurgedFiles,Type,Level,"
"Job.ClientId,Client.Name as ClientName,JobStatus,SchedTime,"
"StartTime,EndTime,RealEndTime,JobTDate,"
"VolSessionId,VolSessionTime,JobFiles,JobBytes,JobErrors,"
"JobMissingFiles,Job.PoolId,Pool.Name as PoolName,PriorJobId,"
"Job.FileSetId,FileSet.FileSet "
"FROM Job "
"LEFT JOIN Client ON Client.ClientId=Job.ClientId "
"LEFT JOIN Pool ON Pool.PoolId=Job.PoolId "
"LEFT JOIN FileSet ON FileSet.FileSetId=Job.FileSetId "
"WHERE Job.JobId=%s",
edit_int64(jr->JobId, ed1));
}
} else {
if (jobstatus > 0) {
jobstatusfilter.bsprintf(" AND JobStatus = '%c' ", jobstatus);
}

if (since_time) {
schedtimefilter.bsprintf(" AND SchedTime > '%s' ", dt);
}

if (jr->Name[0] != 0) {
mdb->db_escape_string(jcr, esc, jr->Name, strlen(jr->Name));
Mmsg(mdb->cmd,
"SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
"FROM Job WHERE Name='%s' %s %s ORDER BY JobId ASC",
esc, jobstatusfilter.c_str(), schedtimefilter.c_str());
} else if (jr->Job[0] != 0) {
mdb->db_escape_string(jcr, esc, jr->Job, strlen(jr->Job));
Mmsg(mdb->cmd,
"SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
"FROM Job WHERE Job='%s' %s %s ORDER BY JobId ASC",
esc, jobstatusfilter.c_str(), schedtimefilter.c_str());
} else if (jr->JobId != 0) {
Mmsg(mdb->cmd,
"SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
"FROM Job WHERE JobId=%s %s %s ",
edit_int64(jr->JobId, ed1), jobstatusfilter.c_str(), schedtimefilter.c_str());
} else { /* all records */
if (jobstatus) {
jobstatusfilter.bsprintf(" WHERE JobStatus = '%c'", jobstatus);
if (since_time) {
schedtimefilter.bsprintf(" AND SchedTime > '%s' ", dt);
}
} else if (since_time) {
schedtimefilter.bsprintf(" WHERE SchedTime > '%s' ", dt);
}

Mmsg(mdb->cmd,
"SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
"FROM Job %s %s ORDER BY JobId ASC%s",
jobstatusfilter.c_str(), schedtimefilter.c_str(), range);
}
Mmsg(mdb->cmd, list_jobs,
selection.c_str(),
range);
}

if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
Expand Down
20 changes: 16 additions & 4 deletions src/dird/ua_cmds.c
Expand Up @@ -146,7 +146,9 @@ static struct cmdstruct commands[] = {
"filesets |\n"
"fileset [ jobid=<jobid> ] | fileset [ ujobid=<complete_name> ] |\n"
"fileset [ filesetid=<filesetid> ] | fileset [ jobid=<jobid> ] |\n"
"jobs | jobid=<jobid> | ujobid=<complete_name> | job=<job-name> |\n"
"jobs [job=<job-name>] [client=<client-name>] [jobstatus=<status>] [volume=<volumename>] [days=<number>] [hours=<number>] |\n"
"job=<job-name> [client=<client-name>] [jobstatus=<status>] [volume=<volumename>] [days=<number>] [hours=<number>] |\n"
"jobid=<jobid> | ujobid=<complete_name> |\n"
"joblog jobid=<jobid> | joblog ujobid=<complete_name> |\n"
"jobmedia jobid=<jobid> | jobmedia ujobid=<complete_name> |\n"
"jobtotals |\n"
Expand All @@ -167,7 +169,9 @@ static struct cmdstruct commands[] = {
"filesets |\n"
"fileset jobid=<jobid> | fileset ujobid=<complete_name> |\n"
"fileset [ filesetid=<filesetid> ] | fileset [ jobid=<jobid> ] |\n"
"jobs | jobid=<jobid> | ujobid=<complete_name> | job=<job-name> [jobstatus=<status>] [days=<number>] [hours=<number>] |\n"
"jobs [job=<job-name>] [client=<client-name>] [jobstatus=<status>] [volume=<volumename>] [days=<number>] [hours=<number>] |\n"
"job=<job-name> [client=<client-name>] [jobstatus=<status>] [volume=<volumename>] [days=<number>] [hours=<number>] |\n"
"jobid=<jobid> | ujobid=<complete_name> |\n"
"joblog jobid=<jobid> | joblog ujobid=<complete_name> |\n"
"jobmedia jobid=<jobid> | jobmedia ujobid=<complete_name> |\n"
"jobtotals |\n"
Expand Down Expand Up @@ -2498,8 +2502,16 @@ bool dot_help_cmd(UAContext *ua, const char *cmd)
#if 1
static bool version_cmd(UAContext *ua, const char *cmd)
{
ua->send_msg(_("%s Version: %s (%s) %s %s %s %s\n"), my_name, VERSION, BDATE,
HOST_OS, DISTNAME, DISTVER, NPRTB(me->verid));
ua->send->object_start("version");
ua->send->object_key_value("name", my_name, "%s ");
ua->send->object_key_value("type", "bareos-director");
ua->send->object_key_value("Version", "%s: ", VERSION, "%s ");
ua->send->object_key_value("bdate", BDATE, "(%s) ");
ua->send->object_key_value("operatingsystem", HOST_OS, "%s ");
ua->send->object_key_value("distname", DISTNAME, "%s ");
ua->send->object_key_value("distversion", DISTVER, "%s ");
ua->send->object_key_value("CustomVersionId", NPRTB(me->verid), "%s\n");
ua->send->object_end("version");

return true;
}
Expand Down

0 comments on commit df58b53

Please sign in to comment.