IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41297 for trunk/ippTools/src


Ignore:
Timestamp:
Feb 27, 2020, 12:44:56 PM (6 years ago)
Author:
eugene
Message:

updates to stacktool: -addexternal, -importexternal

Location:
trunk/ippTools
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools

  • trunk/ippTools/src

  • trunk/ippTools/src/stacktool.c

    r41145 r41297  
    5353static bool exportrunMode(pxConfig *config);
    5454static bool importrunMode(pxConfig *config);
     55static bool importexternalMode(pxConfig *config);
     56static bool addexternalMode(pxConfig *config);
    5557
    5658static bool setstackRunState(pxConfig *config, psS64 stack_id, const char *state);
     
    9698        MODECASE(STACKTOOL_MODE_EXPORTRUN,             exportrunMode);
    9799        MODECASE(STACKTOOL_MODE_IMPORTRUN,             importrunMode);
     100        MODECASE(STACKTOOL_MODE_IMPORTEXTERNAL,        importexternalMode);
     101        MODECASE(STACKTOOL_MODE_ADDEXTERNAL,           addexternalMode);
    98102        default:
    99103            psAbort("invalid option (this should not happen)");
     
    21382142  return true;
    21392143}
     2144
     2145// in this mode, the supplied stacks are inserted into the db and the
     2146// StackExternalStack table is updated with the IDs of the inserted stack
     2147bool importexternalMode(pxConfig *config)
     2148{
     2149    unsigned int nFail;
     2150
     2151    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2152
     2153    PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     2154    PXOPT_LOOKUP_S64(ext_camera_id, config->args, "-ext_camera_id", true, false);
     2155
     2156    // optionally let the user change the filter:
     2157    PXOPT_LOOKUP_STR(new_filter, config->args, "-set_filter", false, false);
     2158
     2159    psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     2160
     2161    // XXX for TEST: psMetadataPrint (stderr, input, 1);
     2162
     2163    psMetadataItem *itemRun = psMetadataLookup (input, "stackRun");
     2164    psAssert (itemRun, "entry not in input?");
     2165    psAssert (itemRun->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2166
     2167    psMetadataItem *entry = psListGet (itemRun->data.list, 0);
     2168    assert (entry);
     2169    assert (entry->type == PS_DATA_METADATA);
     2170
     2171    // grab the data for the stackRun & format as stackRunRow:
     2172    stackRunRow *stackRun = stackRunObjectFromMetadata (entry->data.md);
     2173
     2174    // save the original stack_id and insert with stack_id = 0 to force a
     2175    // new iD.  we then need to retrieve that ID and use it below
     2176    // the new stackRun should
     2177
     2178    psS64 ext_stack_id = stackRun->stack_id;
     2179    stackRun->stack_id = 0;
     2180
     2181    // update filter as well..
     2182    if (new_filter) {
     2183      stackRun->filter = psMemIncrRefCounter(new_filter);
     2184    }
     2185
     2186    // start the transaction so we can ensure stackRun, stackSumSkyfile, stackExternalStack table entries are consistent
     2187    if (!psDBTransaction(config->dbh)) {
     2188        psError(PS_ERR_UNKNOWN, false, "database error");
     2189        return false;
     2190    }
     2191
     2192    // now insert the new stackRun object:
     2193    stackRunInsertObject (config->dbh, stackRun);
     2194
     2195    // get the new stack_id
     2196    psS64 stack_id = psDBLastInsertID(config->dbh);
     2197
     2198    // add an entry in the stackExternalStack table:
     2199    psString query = pxDataGet("stacktool_insertexternal_link.sql");
     2200    if (!query) {
     2201        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2202        return false;
     2203    }
     2204
     2205    if (!p_psDBRunQueryF(config->dbh, query, stack_id, ext_stack_id, ext_camera_id)) {
     2206        psError(PS_ERR_UNKNOWN,false, "database error");
     2207        return(NULL);
     2208    }
     2209
     2210    // now insert the stackSumSkyfile data
     2211    psMetadataItem *itemSum = psMetadataLookup (input, "stackSumSkyfile");
     2212
     2213    psAssert (itemSum, "entry not in input?");
     2214    psAssert (itemSum->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2215
     2216    for (int i = 0; i < itemSum->data.list->n; i++) {
     2217        entry = psListGet (itemSum->data.list, i);
     2218        assert (entry);
     2219        assert (entry->type == PS_DATA_METADATA);
     2220        stackSumSkyfileRow *stackSumSkyfile = stackSumSkyfileObjectFromMetadata (entry->data.md);
     2221
     2222        // need to update stack_id
     2223        stackSumSkyfile->stack_id = stack_id;
     2224        stackSumSkyfileInsertObject (config->dbh, stackSumSkyfile);
     2225
     2226        // fprintf (stdout, "---- row %d ----\n", i);
     2227        // psMetadataPrint (stderr, entry->data.md, 1);
     2228    }
     2229
     2230    if (!psDBCommit(config->dbh)) {
     2231        psError(PS_ERR_UNKNOWN, false, "database error");
     2232        return false;
     2233    }
     2234
     2235    return true;
     2236}
     2237
     2238bool addexternalMode(pxConfig *config) {
     2239
     2240    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2241
     2242    PXOPT_LOOKUP_STR(ext_camera, config->args, "-ext_camera", true,  false);
     2243
     2244    psString query = pxDataGet("stacktool_addexternal.sql");
     2245    if (!query) {
     2246        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2247        return false;
     2248    }
     2249
     2250    psStringSubstitute(&query, ext_camera, "@EXT_CAMERA@");
     2251
     2252    if (!psDBTransaction(config->dbh)) {
     2253        psError(PS_ERR_UNKNOWN, false, "database error");
     2254        return false;
     2255    }
     2256
     2257    if (!p_psDBRunQuery(config->dbh, query)) {
     2258        psError(PS_ERR_UNKNOWN,false, "database error");
     2259        return(NULL);
     2260    }
     2261
     2262    int ext_camera_id = psDBLastInsertID(config->dbh);
     2263    psLogMsg("stacktool", PS_LOG_INFO, "Added new external camera %s (ID = %d)", ext_camera, ext_camera_id);
     2264
     2265    if (!psDBCommit(config->dbh)) {
     2266        psError(PS_ERR_UNKNOWN, false, "database error");
     2267        return false;
     2268    }
     2269
     2270    return true;
     2271}
  • trunk/ippTools/src/stacktool.h

    r37384 r41297  
    4646    STACKTOOL_MODE_UPDATESUMSKYFILE,
    4747    STACKTOOL_MODE_EXPORTRUN,
    48     STACKTOOL_MODE_IMPORTRUN
     48    STACKTOOL_MODE_IMPORTRUN,
     49    STACKTOOL_MODE_IMPORTEXTERNAL,
     50    STACKTOOL_MODE_ADDEXTERNAL
    4951} stacktoolMode;
    5052
  • trunk/ippTools/src/stacktoolConfig.c

    r41145 r41297  
    335335    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
    336336
     337    // -importexternal
     338    psMetadata *importexternalArgs = psMetadataAlloc();
     339    psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     340    psMetadataAddS64(importexternalArgs, PS_LIST_TAIL, "-ext_camera_id",  0,   "external stacks come from this camera (required)", 0);
     341    psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-set_filter",  0,      "replace the filter names with this value", NULL);
     342
     343    // -addexternalcamera
     344    psMetadata *addexternalArgs = psMetadataAlloc();
     345    psMetadataAddStr(addexternalArgs, PS_LIST_TAIL, "-ext_camera",  0,      "external camera which can supply stacks (required)", NULL);
    337346
    338347    psFree(now);
     
    368377    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           STACKTOOL_MODE_IMPORTRUN, importrunArgs);
    369378
     379    PXOPT_ADD_MODE("-importexternal",       "import stacks from external camera from metadata file", STACKTOOL_MODE_IMPORTEXTERNAL, importexternalArgs);
     380    PXOPT_ADD_MODE("-addexternal",          "add external camera which can supply stacks", STACKTOOL_MODE_ADDEXTERNAL, addexternalArgs);
     381
    370382    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
    371383        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
Note: See TracChangeset for help on using the changeset viewer.