def _pt_suite_init(self, cp):
        if not self.opts.pt_project:
            return

        suite_ver = self.opts.pt_version if self.opts.pt_version else __version__
        suite_name = "cp_crawler"
        product_ver = self.opts.pt_product_version if self.opts.pt_product_version else cp.cp_get_product_version(
        )
        product_name = self.opts.pt_product_name if self.opts.pt_product_name else cp.cp_get_product_name(
        )

        self.pt_suite.suite_ver = suite_ver
        self.pt_suite.suite_name = suite_name
        self.pt_suite.product_ver = product_ver
        self.pt_suite.product_name = product_name

        if not self.opts.pt_title and product_name and product_ver:
            self.pt_suite.job_title = "%s %s" % (product_name, product_ver)

        ram = virtual_memory()

        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
        s.close()

        client = self.pt_suite.addNode(
            ptVM("client",
                 version=platform.platform(),
                 ip=ip,
                 cpus=cpu_count(),
                 ram_mb=int(ram.total / (1024 * 1024)) if ram else 0))
        client.addNode(
            ptComponent(self.browser.browser_get_name(),
                        self.browser.browser_get_version()))
def main(suite):
    suite.addLink('Grafana', 'http://grafana.localdomain/')
    suite.addLink('Login page', 'http://192.168.100.3/login')

    s1 = suite.addNode(
        ptHost("s1",
               ip="192.168.0.1",
               hostname="server1.localdomain",
               version="CentOS 7.4",
               cpus=32,
               ram_gb=128))
    s2 = suite.addNode(
        ptHost("s2",
               ip="192.168.0.2",
               hostname="server2.localdomain",
               version="CentOS 7.4",
               cpus=32,
               ram_gb=128))
    s3 = suite.addNode(
        ptHost("s3",
               ip="192.168.0.3",
               hostname="server3.localdomain",
               version="CentOS 7.4",
               cpus=32,
               ram_gb=128))
    s4 = suite.addNode(
        ptHost("s4",
               ip="192.168.0.4",
               hostname="server4.localdomain",
               version="CentOS 7.4",
               cpus=16,
               ram_gb=64))

    vm1 = s1.addNode(
        ptVM("vm1",
             ip="192.168.100.1",
             version="CentOS 7.4",
             virt_type="KVM VM",
             cpus=4,
             ram_gb=32))
    vm2 = s1.addNode(
        ptVM("vm2",
             ip="192.168.100.2",
             version="CentOS 7.4",
             virt_type="KVM VM",
             cpus=4,
             ram_gb=32))
    vm3 = s2.addNode(
        ptVM("vm3",
             ip="192.168.100.3",
             version="CentOS 7.4",
             virt_type="KVM VM",
             cpus=8,
             ram_gb=64))
    vm4 = s3.addNode(
        ptVM("vm4",
             ip="192.168.100.4",
             version="CentOS 7.4",
             virt_type="KVM VM",
             cpus=8,
             ram_gb=64))

    suite.addNode(ptHost("client", params="Python3", scan_info=True))

    vm1.addNode(ptComponent("database", version="1.0.12"))
    vm2.addNode(ptComponent("backend", version="1.0.12"))
    vm3.addNode(ptComponent("UI#1", version="1.0.13"))
    vm4.addNode(ptComponent("UI#2", version="1.0.13"))

    g = "Latency tests"

    suite.addTest(
        ptTest(
            "Simple user login test",
            less_better=True,
            description=
            "Login under a user, 1 parallel client, time includes navigation to home page",
            group=g,
            metrics="sec",
            scores=[0.6, 0.72, 0.65 + random.randint(0, 10) / 10.0],
            deviations=[0.05, 0.12, 0.03],
            loops=100,
            links={"repo": "https://github.com/perfguru87/perftracker-client"},
            attribs={"version": str(__version__)}))
    suite.addTest(
        ptTest(
            "Simple admin login test",
            less_better=True,
            description="Login under admin, 1 parallel client",
            group=g,
            metrics="sec",
            scores=[0.8, 0.9, 1.2 + random.randint(0, 10) / 10.0],
            deviations=[0.03, 0.09, 0.08],
            loops=100,
            links={"repo": "https://github.com/perfguru87/perftracker-client"},
            attribs={"version": str(__version__)}))

    for p in range(1, 5 + random.randint(0, 2)):
        suite.addTest(
            ptTest("Login time",
                   group=g,
                   metrics="sec",
                   less_better=True,
                   category="%d parallel users" % (2**p),
                   scores=[0.3 + sqrt(p) + random.randint(0, 20) / 40.0]))

    for p in range(1, 20 + random.randint(0, 10)):
        suite.addTest(
            ptTest(
                "Pages response time, 1 parallel client",
                group=g,
                metrics="sec",
                less_better=True,
                category="page #%3d" % p,
                scores=[0.3 + random.randint(0, 20) / 40.0],
                errors=['4xx error'] if random.randint(0, 30) == 0 else [],
                warnings=['HTTP 500'] if random.randint(0, 20) == 0 else [],
                status="FAILED" if random.randint(0, 25) == 0 else "SUCCESS"))

    for p in range(1, 100 + random.randint(0, 100)):
        suite.addTest(
            ptTest(
                "Home page response time",
                group=g,
                metrics="sec",
                less_better=True,
                category="DB size %d GB" % p,
                scores=[0.3 + (sqrt(p) + random.randint(0, 20)) / 40],
                errors=['4xx error'] if random.randint(0, 30) == 0 else [],
                warnings=['HTTP 500'] if random.randint(0, 20) == 0 else [],
                status="FAILED" if random.randint(0, 25) == 0 else "SUCCESS"))

    for p in range(1, 100 + random.randint(0, 100)):
        suite.addTest(
            ptTest(
                "Dashboard page response time",
                group=g,
                metrics="sec",
                less_better=True,
                category="DB size %d GB" % p,
                scores=[0.8 + (sqrt(p) + random.randint(0, 20)) / 40],
                errors=['4xx error'] if random.randint(0, 30) == 0 else [],
                warnings=['HTTP 500'] if random.randint(0, 20) == 0 else [],
                status="FAILED" if random.randint(0, 25) == 0 else "SUCCESS"))

    suite.upload()

    g = "Throughput tests"

    for p in range(1, 5 + random.randint(0, 2)):
        suite.addTest(
            ptTest("Home page throughput",
                   group=g,
                   metrics="pages/sec",
                   category="%d parallel clients" % (2**p),
                   scores=[10 + sqrt(p) + random.randint(0, 20) / 5]))

    suite.upload()

    g = "Download throughput"

    for p in range(1, 5 + random.randint(0, 2)):
        suite.addTest(
            ptTest("Download throughput",
                   group=g,
                   metrics="Bytes/sec",
                   category="%d parallel clients" % (2**p),
                   scores=[
                       10000000000 + random.randint(10 * p, 20 * p) * 5000000
                   ]))

    suite.upload()

    g = "Upgrade"

    suite.addTest(
        ptTest("Upgrade with small database",
               group=g,
               metrics="seconds",
               scores=[124, 125, 123]))
    suite.addTest(
        ptTest("Upgrade with large database",
               group=g,
               metrics="seconds",
               scores=[344, 329, 351]))

    suite.upload()