コード例 #1
0
ファイル: MDBWebUtils.py プロジェクト: slactjohnson/lcls2
def add_data_and_two_docs(data, exp, det, url=cc.URL_KRB, krbheaders=cc.KRBHEADERS, **kwargs):
    """ Adds data and document to experiment and detector data bases.
    """
    t0_sec = time()

    detname = pro_detector_name(det)
    colname = detname
    dbname_exp = mu.db_prefixed_name(exp)
    dbname_det = mu.db_prefixed_name(detname)

    id_data_exp = add_data(dbname_exp, data, url, krbheaders)
    id_data_det = add_data(dbname_det, data, url, krbheaders)
    if None in (id_data_exp, id_data_det): return None

    doc = mu.docdic(data, id_data_exp, **kwargs)
    logger.debug(mu.doc_info(doc, fmt='  %s:%s')) #sep='\n  %16s : %s'

    id_doc_exp = add_document(dbname_exp, colname, doc, url, krbheaders)
    doc['id_data'] = id_data_det # override
    doc['id_exp']  = id_doc_exp  # add
    id_doc_det = add_document(dbname_det, colname, doc, url, krbheaders)
    if None in (id_doc_exp, id_doc_det): return None

    msg = 'Add 2 data and docs time %.6f sec' % (time()-t0_sec)\
        + '\n  - data in %s/gridfs id: %s and doc in collection %s id: %s' % (dbname_exp, id_data_exp, colname, id_doc_exp)\
        + '\n  - data in %s/gridfs id: %s and doc in collection %s id: %s' % (dbname_det, id_data_det, colname, id_doc_det)
    logger.debug(msg)

    return id_data_exp, id_data_det, id_doc_exp, id_doc_det
コード例 #2
0
ファイル: MDBWebUtils.py プロジェクト: slactjohnson/lcls2
def info_webclient(**kwargs):

    width = kwargs.get('width', 24)
    ptrn = mu.db_prefixed_name('') if kwargs.get('cdbonly', False) else None
    dbnames = database_names(url=cc.URL, pattern=ptrn)

    dbname = mu.get_dbname(**kwargs)
    if dbname is None:
        s = '\n=== web client %s contains %d databases for name pattern "%s":\n%s\n\n' % (cc.URL, len(dbnames), str(ptrn), str_formatted_list(dbnames))
        for name in dbnames:
             colnames = collection_names(name, url=cc.URL)
             s += '%s %2d cols: %s\n' % (str(name).ljust(width), len(colnames), str(colnames))
        return s

    if not (dbname in dbnames):
        return '\n=== database %s is not found in the list of known:\n%s' % (dbname, str_formatted_list(dbnames))

    colname = mu.get_colname(**kwargs)
    colnames = collection_names(dbname, url=cc.URL)

    if colname is None:
        if colnames is None: return '\n=== colnames is None: database %s is empty ???' % (dbname)
        s = '\n=== database %s contains %d collections: %s\n' % (dbname, len(colnames), str(colnames))
        for cname in colnames:
             s += '%s\n' % info_docs(dbname, cname)
        return s

    if not(colname in colnames):
        return '\n=== database %s does not have collection %s in the list: %s' % (dbname, colname, str(colnames))

    docid = kwargs.get('docid', None)
    if docid is None: return info_docs(dbname, colname)

    return info_doc(dbname, colname, docid)
コード例 #3
0
ファイル: MDBConvertLCLS1.py プロジェクト: ZhenghengLi/lcls2
def scan_calib_for_experiment(exp='cxix25615', **kwargs):

    host = kwargs.get('host', None)
    port = kwargs.get('port', None)
    user = kwargs.get('user', None)
    upwd = kwargs.get('upwd', None)
    verbose = kwargs.get('verbose', False)

    client = dbu.connect_to_server(host, port, user, upwd)
    dbname = dbu.db_prefixed_name(exp)
    if dbu.database_exists(client, dbname):
        msg = 'Experiment %s already has a database. Consider to delete it from the list:\n%s'%\
              (exp, str(dbu.database_names(client)))+\
              '\nBefore adding consider to delete existing DB using command: cdb deldb --dbname %s -C -u <username> -p <password>' % dbname
        logger.warning(msg)
        return

    dircalib = nm.dir_calib(exp)
    #if verbose :
    logger.info('Scan: %s' % dircalib)

    for dir0 in gu.get_list_of_files_in_dir_for_part_fname(dircalib,
                                                           pattern='::'):
        if not os.path.isdir(dir0): continue
        calibvers = os.path.basename(dir0)
        logger.debug('  %s ' % calibvers)

        for dir1 in gu.get_list_of_files_in_dir_for_part_fname(dir0,
                                                               pattern=':'):
            if not os.path.isdir(dir1): continue
            detname = os.path.basename(dir1)
            detname_m = detname_conversion(detname)
            logger.debug('    %s' % detname_m)

            for cftype in gu.get_list_of_files_in_dir(dir1):
                if not (cftype in cc.list_calib_names): continue
                dir2 = '%s/%s' % (dir1, cftype)
                if not os.path.isdir(dir2): continue
                logger.debug('      %s' % cftype)

                cfdir = '%s/%s/%s/%s' % (dircalib, calibvers, detname, cftype)
                listdicts = history_list_of_dicts('%s/HISTORY' % cfdir,
                                                  verbose)
                #logger.debug('XXX listdicts %s' % listdicts)
                count = 0
                for fname in gu.get_list_of_files_in_dir(dir2):
                    logger.debug('        %s' % fname)
                    if fname == 'HISTORY': continue
                    if os.path.splitext(fname)[1] != '.data': continue
                    logger.debug('  XXX begin adding: %s %s %s %s' %
                                 (dircalib, detname_m, cftype, fname))
                    add_calib_file_to_cdb(exp, dircalib, calibvers, detname_m,
                                          cftype, fname, cfdir, listdicts,
                                          **kwargs)
                    count += 1

                logger.info('  converted %3d files from: %s' % (count, cfdir))
コード例 #4
0
ファイル: MDBWebUtils.py プロジェクト: pcdshub/lcls2
def add_data_and_two_docs(data,
                          exp,
                          det,
                          url=cc.URL_KRB,
                          krbheaders=cc.KRBHEADERS,
                          **kwargs):
    """ Check permission and add data and document to experiment and detector data bases.
    """
    logger.debug('add_data_and_two_docs kwargs: %s' % str(kwargs))

    detname = pro_detector_name(det, add_shortname=True)
    colname = detname
    dbname_exp = mu.db_prefixed_name(exp)
    dbname_det = mu.db_prefixed_name(detname)

    kwargs['detector'] = detname  # ex: epix10ka_000001
    kwargs['shortname'] = detname  # ex: epix10ka_000001
    kwargs['longname'] = det  # ex: epix10ka_<_uniqueid>
    #kwargs['detname']  = det_name # already in kwargs ex: epixquad

    resp = add_data_and_doc(data,
                            dbname_exp,
                            colname,
                            url=url,
                            krbheaders=krbheaders,
                            **kwargs)
    if resp is None: return None
    id_data_exp, id_doc_exp = resp

    #logger.warning('Deployment of constants in the %s needs in expert-privilage\n' % dbname_det)
    #if not kwargs.get('confirm', False):
    #mu.request_confirmation()
    #return id_data_exp, None, id_doc_exp, None

    kwargs['id_data_exp'] = id_data_exp  # override
    kwargs['id_doc_exp'] = id_doc_exp  # add
    resp = add_data_and_doc(data,
                            dbname_det,
                            colname,
                            url=url,
                            krbheaders=krbheaders,
                            **kwargs)
    id_data_det, id_doc_det = resp if resp is not None else (None, None)
    return id_data_exp, id_data_det, id_doc_exp, id_doc_det
コード例 #5
0
ファイル: MDBWebUtils.py プロジェクト: slactjohnson/lcls2
 def test_get_random_doc_and_data_ids(det='cspad_0001'):
   dbname = mu.db_prefixed_name(det)
   colname = det
   doc = find_doc(dbname, colname, query={'ctype':'pedestals'})
   print('Pick up any doc for dbname:%s colname:%s pedestals: ' % (dbname,colname))
   print('Document: %s' % str(doc))
   id_doc  = doc.get('_id', None)
   id_data = doc.get('id_data', None)
   print('_id : %s   id_data : %s' % (id_doc, id_data))
   return id_doc, id_data, dbname, colname
コード例 #6
0
def detector_dbname(detname_short, **kwargs):
    """makes detector db name depending on suffix,
       e.g. for detname_short='epixhr2x2_000001' and suffix='mytestdb'
       returns 'cdb_epixhr2x2_000001_mytestdb'
    """
    dbsuffix = kwargs.get('dbsuffix','')
    #logger.debug('detector_dbname detname: %s dbsuffix: %s' % (detname_short, dbsuffix))
    assert isinstance(dbsuffix, str)
    dbname_det = mu.db_prefixed_name(detname_short)
    if dbsuffix: dbname_det += '_%s'% dbsuffix
    assert len(dbname_det) < 50
    logger.debug('detector_dbname detname: %s dbsuffix: %s returns: %s' % (detname_short, dbsuffix, dbname_det))
    return dbname_det
コード例 #7
0
def add_data_and_two_docs(data, exp, det, url=cc.URL_KRB, krbheaders=cc.KRBHEADERS, **kwargs):
    """Add data and document to experiment and detector data bases.
    """
    logger.debug('add_data_and_two_docs kwargs: %s' % str(kwargs))

    detname = pro_detector_name(det, add_shortname=True)
    colname = detname
    dbname_exp = mu.db_prefixed_name(exp)
    dbname_det = mu.db_prefixed_name(detname)

    kwargs['detector']  = detname # ex: epix10ka_000001
    kwargs['shortname'] = detname # ex: epix10ka_000001
    kwargs['longname']  = det     # ex: epix10ka_<_uniqueid>
    #kwargs['detname']  = det_name # already in kwargs ex: epixquad

    resp = add_data_and_doc(data, dbname_exp, colname, url=url, krbheaders=krbheaders, **kwargs)
    if resp is None: return None
    id_data_exp, id_doc_exp = resp

    kwargs['id_data_exp'] = id_data_exp # override
    kwargs['id_doc_exp']  = id_doc_exp  # add
    resp = add_data_and_doc(data, dbname_det, colname, url=url, krbheaders=krbheaders, **kwargs)
    id_data_det, id_doc_det = resp if resp is not None else (None, None)
    return id_data_exp, id_data_det, id_doc_exp, id_doc_det
コード例 #8
0
ファイル: MDB_CLI.py プロジェクト: monarin/lcls2
    def delall(self):
        """USED FOR DEVELOPMENT: Deletes all databases with prefix in the name.
        """
        mode, kwargs = self.mode, self.kwargs
        client = self.client()
        prefix = dbu.db_prefixed_name('')
        dbnames = dbu.database_names(client)
        logger.info('Databases before "%s":\n%s' % (mode, str(dbnames)))
        #confirm = kwargs.get('confirm', False)
        confirm = True
        for dbname in dbu.database_names(client):
            if prefix in dbname:
                logger.info('delete %s' % dbname)
                if confirm:
                    dbu.delete_database(client, dbname)

        if confirm:
            logger.info('Databases after "%s" %s:\n%s' %
                        (mode, dbname, str(dbu.database_names(client))))
        else:
            dbu.request_confirmation()
コード例 #9
0
ファイル: ex07-cdb-xtcav.py プロジェクト: slac-lcls/lcls2
def test_xtcav_calib_constants(fname=
                               '/reg/d/psdm/XPP/xpptut15/calib/Xtcav::CalibV1/XrayTransportDiagnostic.0:Opal1000.0/pedestals/101-102.data',\
                               add_constants_to_db=False) :

    _, exp, _, cvers, detname, ctype, cfname = fname.rsplit('/',6) 
    resp = parse_calib_file_name(cfname)
    begin, end, ext = resp if resp is not None else (None, None, None)
    det = detname_conversion(detname)
    run = begin
    dbname_exp = dbu.db_prefixed_name(exp)
    dbname_det = dbu.db_prefixed_name(det)

    print('LCLS1 Xtcav calibration file: %s' % fname)
    print('Parameters form path: exp:%s det:%s ctype:%s run:%s dbname_exp:%s dbname_det:%s'%\
          (exp, det, ctype, run, dbname_exp, dbname_det))

    #Save(ct,fname)
    o1 = Load(fname)
    d1 = dict_from_xtcav_calib_object(o1)
    print('Xtcav calibration constants as dict:\n', d1)

    if not add_constants_to_db : return
    #==================================

    #---- Delete databases for experiment and detector

    client = dbu.connect_to_server(HOST, PORT)
    print('Open client on host:%s port:%s' % (HOST, PORT))

    print('Delete database %s'% dbname_exp)
    dbu.delete_database(client, dbname_exp)

    print('Delete database %s'% dbname_det)
    dbu.delete_database(client, dbname_det)

    #---- Add data to experiment and detector dbs
    print('Add Xtcav constants') 

    kwargs = {'host' : HOST,\
              'port' : PORT,\
              'version' : 'V01',\
              'comment' : 'test of add-retrieve xtcav constants'
             }
    #insert_calib_data(data, *kwargs)
    dbu.insert_constants(o1, exp, det, ctype, run, time_sec='1000000000', **kwargs)

    #msg = dbu.database_info(client, dbname_exp, level=10)
    #print(msg)

    print('Xtcav constants inserted, now retrieve them from db:%s collection:%s' % (dbname_exp, det))

    db, fs = dbu.db_and_fs(client, dbname_exp)
    col = dbu.collection(db, det)

    #for doc in col.find() :
    #    print(doc)

    doc = dbu.find_doc(col, query={'ctype':ctype, 'run':run})
    print('Found doc:\n', doc)

    o2 = dbu.get_data_for_doc(fs, doc)
    d2 = dict_from_xtcav_calib_object(o2)
    print('Xtcav calib object converted to dict:\n', d2)

    #print('cmp(d1,d2) :', str(d1==d2))

    print('\nCompare dictionaries for Xtcav calib objects loaded directly from calib file and passed through the CDB')
    compare_dicts(d1,d2)

    client.close()
    return