api_logging.pyΒΆ

"""Test with

curl localhost:5000/-/alive | python -m json.tool
curl localhost:5000/my-model/v1/prediction -d @examples/api_logging.json | python -m json.tool
"""

import logging

from porter.datascience import BaseModel
from porter.services import ModelApp, PredictionService
from porter.utils import JSONLogFormatter


class Model(BaseModel):
    def predict(self, X):
        return (X['foo'] % 3) * X['bar']


prediction_svc = PredictionService(
    model=Model(),
    name='my-model',
    api_version='v1',
    batch_prediction=True,
    log_api_calls=True)


app = ModelApp([prediction_svc])


if __name__ == '__main__':
    import logging
    stream_handler = logging.StreamHandler()
    formatter = JSONLogFormatter(
        'asctime', 'levelname', 'module', 'name', 'message',
        'request_id', 'request_data', 'response_data', 'service_class',
        'event')
    stream_handler.setFormatter(formatter)
    logger = logging.getLogger('porter')
    logger.setLevel('INFO')
    logger.addHandler(stream_handler)
    app.run()