IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41294


Ignore:
Timestamp:
Feb 26, 2020, 6:00:56 PM (6 years ago)
Author:
eugene
Message:

working on addexternal / importexternal

Location:
branches/eam_branches/ippTools.20200226
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ippTools.20200226/src/stacktool.c

    r41145 r41294  
    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    int numImportTables = 2;
     2152
     2153    char tables[2] [80] = {"stackInputSkyfile", "stackSumSkyfile"};
     2154
     2155    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2156
     2157    PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     2158
     2159    psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     2160
     2161#ifdef notdef
     2162    fprintf (stderr, "---- input ----\n");
     2163    psMetadataPrint (stderr, input, 1);
     2164#endif
     2165
     2166    // XXX do we need to do this?
     2167    if (!pxCheckImportVersion(config, input)) {
     2168        psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     2169        return false;
     2170    }
     2171    psMetadataItem *item = psMetadataLookup (input, "stackRun");
     2172    psAssert (item, "entry not in input?");
     2173    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2174
     2175    psMetadataItem *entry = psListGet (item->data.list, 0);
     2176    assert (entry);
     2177    assert (entry->type == PS_DATA_METADATA);
     2178    stackRunRow *stackRun = stackRunObjectFromMetadata (entry->data.md);
     2179
     2180    // save the original stack_id and insert with stack_id = 0 to force a
     2181    // new iD.  we then need to retrieve that ID and use it below
     2182    // the new stackRun should
     2183
     2184    psS64 ext_stack_id = stackRun->stack_id;
     2185    stackRun->stack_id = 0;
     2186
     2187    // update filter as well..
     2188    // stackRun->filter = new_filter;
     2189
     2190    if (!psDBTransaction(config->dbh)) {
     2191        psError(PS_ERR_UNKNOWN, false, "database error");
     2192        psFree(where);
     2193        return false;
     2194    }
     2195
     2196    stackRunInsertObject (config->dbh, stackRun);
     2197
     2198    // get the new stack_id
     2199    psS64 stack_id = psDBLastInsertID(config->dbh);
     2200
     2201    if (!psDBCommit(config->dbh)) {
     2202        psError(PS_ERR_UNKNOWN, false, "database error");
     2203        psFree(list);
     2204        return false;
     2205    }
     2206
     2207    psMetadataItem *item = psMetadataLookup (input, "stackSumSkyfile");
     2208
     2209    psAssert (item, "entry not in input?");
     2210    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2211
     2212    for (int i = 0; i < item->data.list->n; i++) {
     2213        entry = psListGet (item->data.list, i);
     2214        assert (entry);
     2215        assert (entry->type == PS_DATA_METADATA);
     2216        stackSumSkyfileRow *stackSumSkyfile = stackSumSkyfileObjectFromMetadata (entry->data.md);
     2217
     2218        // need to update stack_id
     2219        stackSumSkyfile->stack_id = stack_id;
     2220        stackSumSkyfileInsertObject (config->dbh, stackSumSkyfile);
     2221
     2222        // fprintf (stdout, "---- row %d ----\n", i);
     2223        // psMetadataPrint (stderr, entry->data.md, 1);
     2224    }
     2225
     2226    return true;
     2227}
     2228
     2229bool addexternalMode(pxConfig *config) {
     2230
     2231    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2232
     2233    PXOPT_LOOKUP_STR(ext_camera, config->args, "-ext_camera", true,  false);
     2234
     2235    psString query = pxDataGet("stacktool_addexternal.sql");
     2236    if (!query) {
     2237        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2238        return false;
     2239    }
     2240
     2241    psStringSubstitute(&query, ext_camera, "@EXT_CAMERA@");
     2242
     2243    if (!psDBTransaction(config->dbh)) {
     2244        psError(PS_ERR_UNKNOWN, false, "database error");
     2245        psFree(where);
     2246        return false;
     2247    }
     2248
     2249    if (!p_psDBRunQuery(config->dbh, query)) {
     2250        psError(PS_ERR_UNKNOWN,false, "database error");
     2251        psFree(select);
     2252        return(NULL);
     2253    }
     2254
     2255    int ext_camera_id = psDBLastInsertID(config->dbh);
     2256    psLogMsg("stacktool", PS_LOG_INFO, "Added new external camera %s (ID = %d)", ext_camera, ext_camera_id);
     2257
     2258    if (!psDBCommit(config->dbh)) {
     2259        psError(PS_ERR_UNKNOWN, false, "database error");
     2260        psFree(list);
     2261        return false;
     2262    }
     2263
     2264    return true;
     2265}
  • branches/eam_branches/ippTools.20200226/src/stacktool.h

    r37384 r41294  
    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
  • branches/eam_branches/ippTools.20200226/src/stacktoolConfig.c

    r41145 r41294  
    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    psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-ext_camera",  0,      "external stacks come from this camera (required)", NULL);
     341
     342    // -addexternalcamera
     343    psMetadata *addexternalArgs = psMetadataAlloc();
     344    psMetadataAddStr(addexternalArgs, PS_LIST_TAIL, "-ext_camera",  0,      "external camera which can supply stacks (required)", NULL);
    337345
    338346    psFree(now);
     
    368376    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           STACKTOOL_MODE_IMPORTRUN, importrunArgs);
    369377
     378    PXOPT_ADD_MODE("-importexternal",       "import stacks from external camera from metadata file", STACKTOOL_MODE_IMPORTEXTERNAL, importexternalArgs);
     379    PXOPT_ADD_MODE("-addexternal",          "add external camera which can supply stacks", STACKTOOL_MODE_ADDEXTERNAL, addexternalArgs);
     380
    370381    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
    371382        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
Note: See TracChangeset for help on using the changeset viewer.