Skip to main content

A module to extract metrics rom TOSCA blueprints

Project description

The static source code measurement tool for Tosca

Build Status LGTM Grade pypi-version python-version

ToscaMetrics is a Python-based static source code measurement tool to characterize Infrastructure-as-Code. It helps quantify the characteristics of Tosca blueprints to support DevOps engineers when maintaining and evolving it. It currently supports 17 source code metrics, though other metrics can be derived by combining the implemented ones.


How to install

Installation is made simple by the PyPI repository. Download the tool and install it with:

pip install tosca-metrics

or, alternatively from the source code project directory:

pip install -r requirements.txt
pip install .

How to use

Command-line

Run tosca-metrics --help for instructions about the usage:

usage: tosca-metrics [-h] [--omit-zero-metrics] [-d DEST] [-o] [-v] src

Extract metrics from Ansible scripts.

positional arguments:
  src                   source file (Tosca blueprint) or directory

optional arguments:
  -h, --help            show this help message and exit
  --omit-zero-metrics   omit metrics with value equal 0
  -d DEST, --dest DEST  destination path to save results
  -o, --output          shows output
  -v, --version         show program's version number and exit

Assume that the following example is named blueprint1.tosca:

tosca_definitions_version: tosca_simple_yaml_1_0

imports:
  - indigo_custom_types: https://raw.githubusercontent.com/indigo-dc/tosca-types/master/custom_types.yaml

description: >
  TOSCA example for launching the generic_deepaas mesos job
topology_template:


  node_templates:

    marathon-job:
      type: tosca.nodes.indigo.Container.Application.Docker.Marathon
      properties:
        uris: []
        command: 'deepaas-run --listen-ip 0.0.0.0'
        labels:
          HAPROXY_GROUP: external
      artifacts:
        image:
          file: deephdc/deep-oc-plant-classification-theano
          type: tosca.artifacts.Deployment.Image.Container.Docker
      requirements:
        - host: docker_runtime

    docker_runtime:
      type: tosca.nodes.indigo.Container.Runtime.Docker
      capabilities:
        host:
          properties:
            num_cpus: 1.0
            mem_size: 1024 MB
            publish_ports:
               - protocol: tcp
                 source: 5000

  outputs:
    endpoint: 
      value: { concat: [ { get_attribute : [ marathon-job, load_balancer_ips, 0 ] }, ':', { get_attribute : [ docker_runtime, host, publish_ports, 0, target ] } ] }

and is located within the folder blueprints as follows:

blueprints
   |- blueprint1.yml
   |- blueprint2.yml
   |- blueprint3.yml

Also, assume the user's working directory is the blueprints folder. Then, it is possible to extract source code characteristics from that blueprint by running the following command:

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

For this example, the report.json will result in

[
    {
        "filepath": "blueprint1.tosca",
        "lines_blank": 7,
        "lines_code": 33,
        "num_imports": 1,
        "num_keys": 35,
        "num_node_templates": 2,
        "num_properties": 6,
        "num_tokens": 68,
        "text_entropy": 5.76
    }
]

Python

AnsibleMetrics currently supports up to 46 source code metrics, implemented in Python. To extract the value for a given metric follow this pattern:

from toscametrics.<general|blueprint>.metric import Metric

script = 'a valid yaml script'
value = Metric(script).count()

where has to be replaced with the name of the desired metric module to compute the value of a specific metric.
The difference between the general and the blueprint modules is that the blueprint module contains metrics specific to blueprints (for example, the number of node types), while the general module contains metrics that can be generalized to other languages (for example, the lines of code).

For example, to count the number of lines of code:

from toscametrics.general.lines_code import LinesCode

blueprint = """
tosca_definitions_version: tosca_simple_yaml_1_0

imports:
  - indigo_custom_types: https://raw.githubusercontent.com/indigo-dc/tosca-types/master/custom_types.yaml

description: >
  TOSCA example for launching the generic_deepaas mesos job
"""

print('Lines of executable code:', LinesCode(blueprint).count())

To extract the value for all the metrics at once, import the toscametrics.metrics_extractor package and call the method extract_all() (in this case the return value will be a json object):

from toscametrics.metrics_extractor import extract_all

blueprint = """
tosca_definitions_version: tosca_simple_yaml_1_0

imports:
  - indigo_custom_types: https://raw.githubusercontent.com/indigo-dc/tosca-types/master/custom_types.yaml

description: >
  TOSCA example for launching the generic_deepaas mesos job
"""

metrics = extract_all(blueprint)
print('Lines of executable code:', metrics['lines_code'])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tosca-metrics-0.0.7.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

tosca_metrics-0.0.7-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

Details for the file tosca-metrics-0.0.7.tar.gz.

File metadata

  • Download URL: tosca-metrics-0.0.7.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.1

File hashes

Hashes for tosca-metrics-0.0.7.tar.gz
Algorithm Hash digest
SHA256 5f396213057910fb3583c6c935d2274d53c4fa90ca90d9918214bee87c9df208
MD5 4761e013b3b61cd5b94779bb7b62daca
BLAKE2b-256 38d84fc6df851d18e31bcf2850dafe4e45db0e89db02de6ad870bfce8197d274

See more details on using hashes here.

File details

Details for the file tosca_metrics-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: tosca_metrics-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 34.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.1

File hashes

Hashes for tosca_metrics-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 bd86620e2b22f8d693fec8afaf939589ea7c9b9b4f6bac5e49462f5a2a81ca96
MD5 424d007fe5fbc976a16bf05716d21995
BLAKE2b-256 d7456bf4935bfb655808169113aab3880a586a78dd3c895a026d1b52d6b922e2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page