Ejemplo n.º 1
0
    def publish(cls, metrics):
        """Publish service metrics to CERN XSLS service."""
        api_url = current_app.config.get('METRICS_XSLS_API_URL')
        service_id = current_app.config.get('METRICS_XSLS_SERVICE_ID')

        if api_url is None:
            raise RuntimeError("METRICS_XSLS_API_URL must be set.")
        if service_id is None:
            raise RuntimeError("METRICS_XSLS_SERVICE_ID must be set.")

        # Create service document.
        doc = ServiceDocument(
            service_id,
            contact=current_app.config.get('METRICS_XSLS_EMAIL'),
            webpage=current_app.config.get('METRICS_XSLS_WEBPAGE'),
        )

        for obj in metrics:
            doc.add_numericvalue(obj.metric, obj.value)

        # Compute availability
        try:
            avail_imp = current_app.config.get(
                'METRICS_XSLS_AVAILABILITY')
            if avail_imp:
                avail_func = import_string(avail_imp)
                doc.availability = avail_func(doc)
        except Exception:
            current_app.logger.exception("Could not compute availability")

        resp = XSLSPublisher.send(doc, api_url=api_url)
        if resp.status_code != 200:
            raise RuntimeError("%s did not accept service XML (status %s)" % (
                resp.content, resp.status_code), resp.content)
def test_outofbounds():
    """Test out of bounds values."""
    with pytest.raises(AssertionError):
        ServiceDocument(None)
    with pytest.raises(AssertionError):
        ServiceDocument(1234)
    with pytest.raises(AssertionError):
        ServiceDocument('id', timestamp='1234')
    with pytest.raises(AssertionError):
        ServiceDocument('id', status=100)
    with pytest.raises(AssertionError):
        ServiceDocument('id', status='not-a-status')
    doc = ServiceDocument('id')
    with pytest.raises(AssertionError):
        doc.add_numericvalue(1234, 'val')
    with pytest.raises(AssertionError):
        doc.add_numericvalue('name', 1234, desc=1234)
    with pytest.raises(AssertionError):
        doc.add_numericvalue('name', 'astring', desc=1234)
    # Remove in v0.3 (availability removed)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability=-1)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability=101)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability='100')
Ejemplo n.º 3
0
def test_outofbounds():
    """Test out of bounds values."""
    with pytest.raises(AssertionError):
        ServiceDocument(None)
    with pytest.raises(AssertionError):
        ServiceDocument(1234)
    with pytest.raises(AssertionError):
        ServiceDocument('id', timestamp='1234')
    with pytest.raises(AssertionError):
        ServiceDocument('id', status=100)
    with pytest.raises(AssertionError):
        ServiceDocument('id', status='not-a-status')
    doc = ServiceDocument('id')
    with pytest.raises(AssertionError):
        doc.add_numericvalue(1234, 'val')
    with pytest.raises(AssertionError):
        doc.add_numericvalue('name', 1234, desc=1234)
    with pytest.raises(AssertionError):
        doc.add_numericvalue('name', 'astring', desc=1234)
    # Remove in v0.3 (availability removed)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability=-1)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability=101)
    with pytest.raises(AssertionError):
        ServiceDocument('id', availability='100')
Ejemplo n.º 4
0
def test_numericvalue():
    """Test adding numeric data to service."""
    dt = datetime(2015, 1, 1, 0, 0, 0)
    doc = ServiceDocument('myid', timestamp=dt)
    doc.add_numericvalue('val1', 1234)
    doc.add_numericvalue('val2', 12.34)
    doc.add_numericvalue('val3', Decimal("0.1"))
    doc.add_numericvalue('val4', Decimal("0.1") + Decimal("0.2"))
    doc.add_numericvalue('val5', 1234, desc="a desc")

    assert doc.to_xml() == \
        '<serviceupdate xmlns="http://sls.cern.ch/SLS/XML/update">' \
        '<id>myid</id>' \
        '<availability>100</availability>' \
        '<timestamp>2015-01-01T00:00:00</timestamp>' \
        '<data>' \
        '<numericvalue name="val1">1234</numericvalue>' \
        '<numericvalue name="val2">12.34</numericvalue>' \
        '<numericvalue name="val3">0.1</numericvalue>' \
        '<numericvalue name="val4">0.3</numericvalue>' \
        '<numericvalue desc="a desc" name="val5">1234</numericvalue>' \
        '</data>' \
        '</serviceupdate>'
Ejemplo n.º 5
0
def test_numericvalue():
    """Test adding numeric data to service."""
    dt = datetime(2015, 1, 1, 0, 0, 0)
    doc = ServiceDocument('myid', timestamp=dt)
    doc.add_numericvalue('val1', 1234)
    doc.add_numericvalue('val2', 12.34)
    doc.add_numericvalue('val3', Decimal("0.1"))
    doc.add_numericvalue('val4', Decimal("0.1") + Decimal("0.2"))
    doc.add_numericvalue('val5', 1234, desc="a desc")
    doc.add_numericvalue('val6', long_type(1234))

    assert doc.to_xml() == \
        '<serviceupdate xmlns="http://sls.cern.ch/SLS/XML/update">' \
        '<id>myid</id>' \
        '<status>available</status>' \
        '<timestamp>2015-01-01T00:00:00</timestamp>' \
        '<data>' \
        '<numericvalue name="val1">1234</numericvalue>' \
        '<numericvalue name="val2">12.34</numericvalue>' \
        '<numericvalue name="val3">0.1</numericvalue>' \
        '<numericvalue name="val4">0.3</numericvalue>' \
        '<numericvalue desc="a desc" name="val5">1234</numericvalue>' \
        '<numericvalue name="val6">1234</numericvalue>' \
        '</data>' \
        '</serviceupdate>'
    assert validate_xsd(doc.to_xml())