从Ansible脚本中提取度量的模块

ansiblemetrics的Python项目详细描述


BuildDocumentationLGTM GradeLGTM Alertspypi-versionpypi-statusrelease-dateLicensepython-version

有关完整文档,请访问radon-h2020.github.io。在

AnsibleMetrics公司

AnsibleMetrics是一个基于Python的静态源代码分析器,用于Ansible蓝图,它有助于量化基础结构代码的特性,以支持DevOps工程师在维护和改进它。 它目前支持46个源代码度量,但是其他度量可以通过组合实现的度量来派生。在

它代表着在缩小仪器软件质量差距方面向前迈进了一步,以支持DevOps工程师开发和维护基础设施代码,并为其质量开发度量模型!在

如何安装

安装由PyPI repository简化。 下载该工具并安装:

pip install ansible-metrics

或者,也可以从源代码项目目录:

pip install -r requirements.txt
pip install .

如何使用

命令行

运行ansible-metrics --help获取有关用法的说明:

^{pr2}$

假设下面的示例名为playbook1.yml

----hosts:webserversvars:http_port:80remote_user:roottasks:-name:ensure apache is at the latest versionyum:name:httpdstate:latest-hosts:databasesremote_user:roottasks:-name:ensure postgresql is at the latest versionyum:name:postgresqlstate:latest-name:ensure that postgresql is startedservice:name:postgresqlstate:started

位于文件夹playbooks中,如下所示:

剧本
|-playbook1.yml
|-playbook3.yml
|-playbook3.yml

另外,假设用户的工作目录是playbooks文件夹。然后,可以通过运行以下命令从该蓝图中提取源代码特征:

ansible-metrics --omit-zero-metrics playbook1.yml --dest report.json

对于本例,\textit{报表.json}会导致

{
    "filepath": "playbook1.yml",
    "avg_play_size": 10,
    "avg_task_size": 4,
    "lines_blank": 4,
    "lines_code": 20,
    "num_keys": 20,
    "num_parameters": 6,
    "num_plays": 2,
    "num_tasks": 3,
    "num_tokens": 50,
    "num_unique_names": 3,
    "num_vars": 1,
    "text_entropy": 4.37
}

^{3元Python>

AnsibleMetrics目前支持多达46个源代码度量,用Python实现。 要提取给定度量的值,请遵循以下模式:

fromioimportStringIOfromansiblemetrics.<general|playbook>.<metric>import<Metric>script='a valid yaml script'value=<Metric>(StringIO(script).count()

其中,<;metric>;必须替换为所需的度量模块的名称,才能计算特定度量的值。
generalplaybook模块之间的区别在于,playbook模块包含特定于剧本的度量(例如,播放和任务的数量),而general模块包含可以通用到其他语言的度量(例如,代码行)。在

例如,要计算代码行数:

fromioimportStringIOfromansiblemetrics.general.locimportLOCscript="""---- hosts: all  tasks:  - name: This is a task!    debug:      msg: "Hello World""""metric=LOC(StringIO(script))print('Lines of executable code:',metric.count())# This will result in # > Lines of executable code: 5

要一次提取46个度量的值,请导入ansiblemetrics.metrics_extractor包并调用方法extract_all()(在本例中,返回值将是一个json对象):

fromioimportStringIOfromansiblemetrics.metrics_extractorimportextract_allscript="""---- hosts: all  tasks:  - name: This is a task!    debug:      msg: "Hello World""""metrics=extract_all(StringIO(script))print('Lines of executable code:',metrics['lines_code'])# This will result in # > Lines of executable code: 5

如何作出贡献

克隆为第一个存储库:

git clone https://github.com/radon-h2020/radon-ansible-metrics.git

然后,移动到文件夹位置并运行

pip install -r requirements.txt

安装依赖项。在

执行pytest以运行测试套件。在

步骤1:创建一个新分支来处理度量

创建一个分支来实现(或更新)和测试给定的度量。在

移到项目文件夹并运行以下命令:

  • git checkout master移动到分支master
  • git pull确保使用最新版本进行更新
  • git checkout -b <metric_name>创建并移动到新的工作分支。在

步骤2:文档度量

首先,在docs文件夹中记录新指标的预期行为和示例。在

用度量名称命名文档文件,并按照现有度量中的格式对其进行描述。在

步骤3:创建测试用例

tests文件夹中创建一个测试用例,并将其命名为tests\<;metric>_count.py。在

步骤4:实现度量

最后,在文件夹ansiblemetrics/<general|playbook>中创建实现度量的脚本。在

定义使用空实体进行测试的方法。在

运行pytest以确保测试用例在步骤3失败。在

实现方法的主体。在

再次运行pytest,以确保测试用例在步骤3^{str1}$pass中实现。在

第4步:提交您的工作

移到项目文件夹并运行以下命令:

  • git add <modified_file>对于每个修改过的文件,git add .添加所有修改过的文件(使用此选项时请注意添加正确的文件)

  • git status有助于检查哪些文件已被更改/添加/删除

  • 准备好后,运行git commit -m "A message describing the work done"

  • {19>如果你的请求改变,你的分支将被打开


变更日志

有关发布历史记录的信息,请参阅CHANGELOG

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在通过REST Api发送之前,java是否会操纵map中键的顺序?   java实时代码编译?   java在尝试使用JavaFX制作东西时获得0xC0000409   java截图并返回servlet?   java哪个用户认证集成安全性?   SpringJavaMailSender和MS Exchange:java。lang.noclassdeffounderror:com。太阳邮政uti。邮件记录器   Linux上的Java小程序无法获得权限   java如何获得一行(范围)中字符串的组合?   媒体播放器的java意图过滤器(Youtube视频播放)   java如何明确地确定文件是否不是我想要的类型?   Java 8中并发异步方法后跟并行执行方法