diff --git a/data-access/engine/src/common/include/fitsfiles.hpp b/data-access/engine/src/common/include/fitsfiles.hpp index 5fc90b01796b3533b709d93cf96e47a20f2fe731..717069dff6351dcf2ae38ec1cef2929e31895324 100644 --- a/data-access/engine/src/common/include/fitsfiles.hpp +++ b/data-access/engine/src/common/include/fitsfiles.hpp @@ -39,7 +39,7 @@ namespace fitsfiles key_values_by_type key_values; }; - std::vector<Hdu> fname2hdrstr(std::string filename, unsigned int maxHduPos, const keys_by_type *keys = nullptr); + std::vector<Hdu> fname2hdrstr(std::string filename, unsigned int maxHduPos, unsigned int minHduPos = 1, const keys_by_type *keys = nullptr); // for services diff --git a/data-access/engine/src/common/src/fitsfiles.cpp b/data-access/engine/src/common/src/fitsfiles.cpp index df4c9d5ae45dc6dfba124860d33602d49cc0527f..e58683be6e21bb88b1bbf557903b5edef368c834 100644 --- a/data-access/engine/src/common/src/fitsfiles.cpp +++ b/data-access/engine/src/common/src/fitsfiles.cpp @@ -359,7 +359,7 @@ string fitsfiles::append_card_if_not_in_header(string header, const vector<fits_ // deprecated vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( - string filename, unsigned int maxHduPos, + string filename, unsigned int maxHduPos, unsigned int minHduPos, const keys_by_type* keys) { LOG_trace(__func__); @@ -369,7 +369,7 @@ vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( // FIXME enhance fits::header to avoid open the file at each cycle unsigned int hdupos; - for(hdupos = 1; hdupos <= maxHduPos; hdupos++) + for(hdupos = minHduPos; hdupos <= maxHduPos; hdupos++) { fits::header hdr(filename, hdupos); // FIXME catch run-time except if not IMAGE_HDU -> how to deal with this? diff --git a/data-access/engine/src/vlkb-obscore/src/config.hpp b/data-access/engine/src/vlkb-obscore/src/config.hpp index 40fe226c0b8eb1cabdfffb25b4d61522eb09b4cf..0d573977afea56ba3a9b14ba6a9fe63f3abe7956 100644 --- a/data-access/engine/src/vlkb-obscore/src/config.hpp +++ b/data-access/engine/src/vlkb-obscore/src/config.hpp @@ -28,7 +28,7 @@ class config private: std::string value(std::string key) {return m_settings.at(key);} - const std::string fits_dir{"fits_path_surveys"}; + const std::string fits_dir{"fits_path_datasets"}; const std::string pg_uri{"pg_uri"}; const std::string pg_schema{"pg_schema"}; @@ -48,7 +48,7 @@ class config std::map<const std::string, std::string> m_settings { - {fits_dir, "/srv/surveys"}, + {fits_dir, "/srv/datasets"}, {pg_uri, empty_string}, {pg_schema, empty_string}, diff --git a/data-access/engine/src/vlkb-obscore/src/database.hpp b/data-access/engine/src/vlkb-obscore/src/database.hpp index d7a5f8e772e9ccde85151680156099061f3cbd27..0d1ae42eddca93ea69bb109ba8d2f4b43d747df7 100644 --- a/data-access/engine/src/vlkb-obscore/src/database.hpp +++ b/data-access/engine/src/vlkb-obscore/src/database.hpp @@ -15,7 +15,8 @@ namespace database const std::string obscore_access_format, const std::string remote_fitsdir, const std::string db_uri, const std::string db_schema, - const std::string fitsdir, int max_hdupos); + const std::string fitsdir, + int max_hdupos, int min_hdupos = 1); void dbModifyGroups(int sid, const std::string groups, const std::string obscore_publisher, diff --git a/data-access/engine/src/vlkb-obscore/src/database/database.cpp b/data-access/engine/src/vlkb-obscore/src/database/database.cpp index cbf1a0caaab5907055f44a139c63b6ca8abe0586..a25b6ea5b5d743a8748af1f584a3072c0d66ac75 100644 --- a/data-access/engine/src/vlkb-obscore/src/database/database.cpp +++ b/data-access/engine/src/vlkb-obscore/src/database/database.cpp @@ -257,7 +257,8 @@ void database::dbAddSurvey(int sid, const string groups, const string obscore_publisher, const string obscore_access_format, const string obscore_access_url, - const string db_uri, const string db_schema, const string fitsdir, int max_hdupos) + const string db_uri, const string db_schema, const string fitsdir, + int max_hdupos, int min_hdupos) { LOG_trace(__func__); @@ -313,7 +314,8 @@ void database::dbAddSurvey(int sid, const string groups, // 4. set optional values which are available (in header or in metadata) try { - const std::vector<fitsfiles::Hdu> all_hdu{fitsfiles::fname2hdrstr(pathname, max_hdupos,&in_keys)}; + int min_hdupos = 1; + const std::vector<fitsfiles::Hdu> all_hdu{fitsfiles::fname2hdrstr(pathname, max_hdupos, min_hdupos, &in_keys)}; for(fitsfiles::Hdu hdu : all_hdu) { diff --git a/data-access/engine/src/vlkb-obscore/src/main.cpp b/data-access/engine/src/vlkb-obscore/src/main.cpp index 6bfd5c05ff87cdb27d962e637eece3d9e46c809e..9746dc32bd3199a8535871b02e92c8841a0683d7 100644 --- a/data-access/engine/src/vlkb-obscore/src/main.cpp +++ b/data-access/engine/src/vlkb-obscore/src/main.cpp @@ -237,7 +237,14 @@ int cmd_dbFiles(int argc, char * argv[]) int cmd_dbAdd(int argc, char * argv[]) { - const int max_hdupos = 1; // FIXME add as param to the command + const string usage_str{"Usage: dbadd <SID> [SID_to]\n" + " dbadd <SID> [--extnum N]\n" + "inserts survey metadata to database\n" + "works on Primary HDU unless 'extnum' given:\n" + "--extnum N where N=1..n (1 is the first extension after the Primary HDU)"}; + + int max_hdupos = 1; + int min_hdupos = 1; const string groups = ""; // NOTE: uses separate cmd 'dbmodgroups' to add groups to enable access to PRIVATE surveys int sid_from, sid_to; int rc = 0; @@ -251,16 +258,28 @@ int cmd_dbAdd(int argc, char * argv[]) case 3: sid_from = std::stoi(argv[1]); - sid_to = std::stoi(argv[2]); + sid_to = std::stoi(argv[2]); + break; + + case 4: + sid_from = std::stoi(argv[1]); + if(0 == string{"--extnum"}.compare(string{argv[2]})) + { + min_hdupos = max_hdupos = 1 + std::stoi(argv[3]); + } + else + { + cout << "--extnum expected\n" << usage_str << endl; + return vlkb::EXIT_WITH_USAGE; + } break; default: - cout << "Usage: dbadd <SID-from> [SID-to]" << endl - << "inserts survey(s) metadata to database" << endl; - rc = vlkb::EXIT_WITH_USAGE; + cout << usage_str << endl; + return vlkb::EXIT_WITH_USAGE; } - OUT_STREAM << "This will add all data into database, (even if already exists!), confirm with 'yes':" << endl; + OUT_STREAM << "This will add all data into database. Confirm with 'yes':" << endl; string answer; std::cin >> answer; if(answer.compare("yes") != 0) return vlkb::EXIT_WITH_ERROR; @@ -271,7 +290,7 @@ int cmd_dbAdd(int argc, char * argv[]) { database::dbAddSurvey(i, groups, vlkb::conf.getObsCorePublisher(), vlkb::conf.getObsCoreAccessFormat(), vlkb::conf.getObscoreAccessUrl(), - vlkb::conf.getDbUri(WITH_PASSWORD), vlkb::conf.getDbSchema(), vlkb::conf.getFitsDir(), max_hdupos); + vlkb::conf.getDbUri(WITH_PASSWORD), vlkb::conf.getDbSchema(), vlkb::conf.getFitsDir(), max_hdupos, min_hdupos); } catch(exception& e) {