CMS运行登记客户
runregistr的Python项目详细描述
运行注册表客户端
python客户端从cms run registry中检索和查询数据
安装
pip install runregistry
python版本和虚拟环境
此软件包需要python版本>;=3.6。
在lxplus中使用python 3.6:https://cern.service-now.com/service-portal/article.do?N=KB0000730 还需要虚拟环境,如果您在lxplus中,则应运行以下命令:
virtualenv venv
source venv/bin/activate
身份验证(先决条件)
必须为客户端提供一种访问网格用户证书的方法。
您可以用三种可能的方法来完成此操作:
- 手动提供证书(解释如下)。
- 在常规路径中提供无密码用户证书(第一个是
~\private\
,第二个是~.globus\
)(解释如下)。 - 在环境变量中设置存储证书的路径:
cern_certificate_path
手动提供证书
- 从此处下载网格用户证书
- 将其转换为公钥和私钥(证书必须是无密码的。 ):
mkdir -p ~/private
# For next commands Import Password is blank, PEM passphrase needs to be set
openssl pkcs12 -clcerts -nokeys -in myCertificate.p12 -out ~/private/usercert.pem
openssl pkcs12 -nocerts -in myCertificate.p12 -out ~/private/userkey.tmp.pem
openssl rsa -in ~/private/userkey.tmp.pem -out ~/private/userkey.pem
如果您在lxplus中,则此时应完成所有操作,因为包将首先查找~/private/
,并且上述命令将在~/private/
中设置证书。
如果您想继续手动提供证书,您将不得不修改上面的命令,并将-out放入您记忆中的文件夹中。
然后按以下方式使用客户端:
importrunregistryrun=runregistry.get_run(run_number=328762,cert=(cert,key))
其中cert和key是指向上面生成的usercert.pem和userkey.pem的路径。
用法
跑一次(跑一次):
importrunregistryrun=runregistry.get_run(run_number=328762)
查询几次运行(获取运行):
importrunregistryruns=runregistry.get_runs(run_number={'or':[328762,323555,323444]})
应用自定义筛选器(运行309000到310000之间的编号,其中至少有一个良好的dt lumisection)
importrunregistryruns=runregistry.get_runs(filter={'run_number':{'and':[{'>':309000},{'<':310000}]},'dt-dt':'GOOD'})
请注意,我们使用dt dt('dt'两次)这是因为有多个工作区,第一个'dt'表示我们在dt工作区,第二个'dt'表示我们想要列'dt'。所以状态标志的语法是{workspace}-{column}。如果我们想让tracker工作区的strip列至少有一个lumisection良好,那么查询将如下所示:
importrunregistryruns=runregistry.get_runs(filter={'run_number':{'and':[{'>':309000},{'<':310000}]},'tracker-strip':'GOOD'})
根据属性,您可以使用不同的运算符:
运算符
<表><广告>使用"like"或"notlike"运算符时,必须用百分比符号包围查询,请参见下面的示例。
当筛选三元组属性(任何好/坏/备用…)时,不能使用任何字符串值,唯一允许的值是严格相等的"=",并且默认设置。允许的值包括good、bad、standby、notset、excluded和empty。
您也可以组合过滤器:
importrunregistryruns=runregistry.get_runs(filter={'run_number':{'and':[{'>':309000},{'<':310000}]},'hlt_key':{'like':'%commissioning2018%'}'significant':{'=':True}})
如果通过观察rr中的网络请求,b应用程序,您要使用网络请求观察到的相同筛选器。只需将ignore_filter_transformation=true
传递到任何查询即可。
示例(运行309000到310000之间的编号,其中至少有一个良好的dt lumisection):
pip install runregistry0
另外,如果通过观察rr web应用程序中的网络请求,您希望获得网络请求中的数据。只需compress_attributes=false
,例如:
pip install runregistry1
尚无法通过注释和原因进行查询
获取数据集
pip install runregistry2
获取数据集
pip install runregistry3
获取lumisections
获取lumisects数组
您可以查询运行(或数据集)的lumisections,您将需要运行编号和数据集名称(查询运行时,数据集名称必须为"online")
pip install runregistry4
响应将是一个包含{workspace}-{column}:{"status":"good/bad/standby…"、"comment":"为范围所做的注释"、"cause":"一个常见的重复原因"}
要获取OMS数据:请使用OMS API。您应该只对rr负责的数据使用run registry。 但是,如果仍要访问OMS lumisections,可以这样做:
上一次运行注册表允许您更改每个数据集的OMS(当时是WBM)属性,如果需要特定的数据集lumisections,可以在第二个参数中提供RR数据集的名称:
pip install runregistry5
获取lumisection范围
通常会有包含大量lumisects(有些甚至超过5000个)的运行/数据集,因此查询这些类型的lumisects可能会对api造成很大的负担。
检索范围的查询也是可能的,您可以这样做:
pip install runregistry6
您将收到一个范围数组,除了为每个列声明三元组(注释、状态和原因)外,该数组还将包含两个属性,称为start(范围开始的lumisection)和end(范围结束的lumisection)。
处理响应
运行筛选时,响应的属性分为属于OMS的属性和属于RR的属性(要查看哪些属性属于哪个属性,请参阅下表,或查看响应)。
属于OMS的属性位于"OMS属性"中。
属于RR的属性在"RR属性"中。
可供查询的属性
根据属性类型(数字、字符串、布尔值),请参见上面的运算符表,以了解哪些类型的运算符可用于查询
OMS属性:
<表><广告>RR运行属性:
<表><广告>RR数据集属性:
<表><广告>dt_状态、csc_状态等是数据集的工作区脱机状态,它们可以是打开、关闭或完成。
对于脱机和联机状态标志,也可以进行筛选。属性由{workspace}-{column}组成。例如,如果我们想查询309000到310000之间运行的良好跟踪条数据集,我们可以这样做:
pip install runregistry7
运行测试
pip install runregistry8
故障排除
支架
如果您有任何问题,或者客户工作不正常,请随时给我发电子邮件至f.e@cern.ch。或者通过Fabio24的Skype,我也可以在Mattermost上使用。
更新pip包
pip install runregistry9
FAQ
这是否适用于Python2.7?
< /P>