Index: trunk/ippTools/src/pstamptool.c
===================================================================
--- trunk/ippTools/src/pstamptool.c	(revision 27170)
+++ trunk/ippTools/src/pstamptool.c	(revision 27171)
@@ -116,8 +116,10 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",           true, false);
-    PXOPT_LOOKUP_STR(outProduct,  config->args, "-out_product",   true, false);
-    PXOPT_LOOKUP_STR(lastFileset, config->args, "-last_fileset", false, false);
-    PXOPT_LOOKUP_STR(state,       config->args, "-state",         false, false);
+    PXOPT_LOOKUP_STR(uri,         config->args, "-set_uri",           true, false);
+    PXOPT_LOOKUP_STR(outProduct,  config->args, "-set_out_product",   true, false);
+    PXOPT_LOOKUP_STR(lastFileset, config->args, "-set_last_fileset", false, false);
+    PXOPT_LOOKUP_STR(state,       config->args, "-set_state",         false, false);
+    PXOPT_LOOKUP_STR(label,       config->args, "-set_label",         false, false);
+    PXOPT_LOOKUP_S32(pollInterval, config->args, "-set_poll_interval",false, false);
 
     if (!pstampDataStoreInsert(config->dbh,
@@ -125,6 +127,9 @@
             state,
             lastFileset,
+            NULL,       // timestamp
+            label,      // label
             outProduct,
-            uri
+            uri,
+            pollInterval
         )) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -189,23 +194,31 @@
 
     PXOPT_LOOKUP_S64(ds_id,       config->args, "-ds_id",         true, false);
-    PXOPT_LOOKUP_STR(lastFileset, config->args, "-last_fileset",  false, false);
-    PXOPT_LOOKUP_STR(state,       config->args, "-state",         false, false);
-
-    if (!state && !lastFileset) {
+    PXOPT_LOOKUP_STR(lastFileset, config->args, "-set_last_fileset",  false, false);
+    PXOPT_LOOKUP_STR(state,       config->args, "-set_state",         false, false);
+    PXOPT_LOOKUP_STR(label,       config->args, "-set_label",         false, false);
+    PXOPT_LOOKUP_S32(pollInterval, config->args, "-set_poll_interval",         false, false);
+    PXOPT_LOOKUP_BOOL(update_timestamp, config->args, "-update_timestamp", false);
+
+    if (!state && !lastFileset && !pollInterval && !update_timestamp && !label) {
         psError(PS_ERR_UNKNOWN, true, "at least one of -last_fileset or -state is required");
         return false;
     }
 
-    char *query = psStringCopy ("UPDATE pstampDataStore SET");
-    bool needComma = false;
+    char *query = psStringCopy ("UPDATE pstampDataStore SET timestamp = CURRENT_TIMESTAMP() ");
 
     if (lastFileset) {
-        psStringAppend(&query, " lastFileset = '%s'", lastFileset);
-        needComma = true;
+        psStringAppend(&query, " , lastFileset = '%s'", lastFileset);
     }
 
     if (state) {
-        psStringAppend(&query, "%s state = '%s'", needComma ? "," : " ", state);
-        needComma = true; // be ready in case we add another field
+        psStringAppend(&query, ", state = '%s'", state);
+    }
+
+    if (label) {
+        psStringAppend(&query, ", label = '%s'", label);
+    }
+
+    if (pollInterval) {
+        psStringAppend(&query, ", pollInterval = %d", pollInterval);
     }
 
@@ -265,4 +278,5 @@
     psMetadata *where = psMetadataAlloc();
     PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
+    pxAddLabelSearchArgs(config, where, "-label", "label", "LIKE");
 
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
@@ -387,8 +401,18 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    pxAddLabelSearchArgs(config, where, "-label", "label", "LIKE");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     psString query = pxDataGet("pstamptool_completedreq.sql");
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -674,4 +698,6 @@
     PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
+    pxAddLabelSearchArgs(config, where, "-label", "label", "LIKE");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -685,5 +711,5 @@
     // use psDBGenerateWhereSQL because the SQL yields an intermediate table
     if (psListLength(where->list)) {
-        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
Index: trunk/ippTools/src/pstamptoolConfig.c
===================================================================
--- trunk/ippTools/src/pstamptoolConfig.c	(revision 27170)
+++ trunk/ippTools/src/pstamptoolConfig.c	(revision 27171)
@@ -47,6 +47,8 @@
     psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-uri",          0, "define storage uri (required)", NULL);
     psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-out_product",  0, "define output product name (required)", NULL);
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0, "define last fileset seen", NULL);
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-state",        0, "define datastore state", "enabled");
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-set_last_fileset", 0, "define last fileset seen", NULL);
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-set_state",        0, "define datastore state", "enabled");
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-set_label",        0, "define datastore label", NULL);
+    psMetadataAddS32(adddatastoreArgs, PS_LIST_TAIL, "-set_poll_interval", 0, "define datastore poll interval (seconds)", 60);
 
     // -datastore
@@ -58,6 +60,10 @@
     psMetadata *moddatastoreArgs = psMetadataAlloc();
     psMetadataAddS64(moddatastoreArgs, PS_LIST_TAIL, "-ds_id", 0,            "define ds_id", 0);
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0,     "set last_fileset seen", NULL);
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-state", 0,            "set state", NULL);
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-set_last_fileset", 0,     "set last_fileset seen", NULL);
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-set_state", 0,            "set state", NULL);
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-set_label", 0,            "set label", NULL);
+    psMetadataAddS32(moddatastoreArgs, PS_LIST_TAIL, "-set_poll_interval", 0, "define datastore poll interval (seconds)", 0);
+    psMetadataAddBool(moddatastoreArgs, PS_LIST_TAIL, "-update_timestamp", 0, "update the timestamp", false);
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-state", 0,            "search by state", NULL);
 
     // -addreq
@@ -71,4 +77,5 @@
     psMetadata *pendingreqArgs = psMetadataAlloc();
     psMetadataAddS64(pendingreqArgs, PS_LIST_TAIL, "-req_id", 0,            "define req_id", 0);
+    psMetadataAddStr(pendingreqArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampRequest label (LIKE comparision)", NULL);
     psMetadataAddU64(pendingreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     psMetadataAddBool(pendingreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
@@ -84,4 +91,5 @@
     // -completedreq
     psMetadata *completedreqArgs = psMetadataAlloc();
+    psMetadataAddStr(completedreqArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampJob label (LIKE comparision)", NULL);
     psMetadataAddU64(completedreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     psMetadataAddBool(completedreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
@@ -127,4 +135,5 @@
     psMetadataAddS64(pendingjobArgs, PS_LIST_TAIL, "-job_id", 0,            "define job", 0);
     psMetadataAddS64(pendingjobArgs, PS_LIST_TAIL, "-req_id", 0,            "define request", 0);
+    psMetadataAddStr(pendingjobArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by pstampJob label (LIKE comparision)", NULL);
     psMetadataAddU64(pendingjobArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     psMetadataAddBool(pendingjobArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
