Nikolay Mahotkin 814b030417 Add demo app for Mistral
* Simple server
 * expose one endpoint - /tasks
 * recieve correct signal from mistral
  about task execution, log 'task N started,
 task N finished'
 * logging

Change-Id: I230eac12319be820d64612d242b9190a10be946e
2013-12-25 17:41:13 +04:00

71 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
#
# Copyright 2013 - Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from pecan import abort
from pecan import rest
import pecan
from wsme import types as wtypes
import wsmeext.pecan as wsme_pecan
from demo_app import tasks
LOG = logging.getLogger(__name__)
class Controller(rest.RestController):
"""API root controller"""
@wsme_pecan.wsexpose(wtypes.text)
def get_all(self):
LOG.debug("Fetch items.")
values = {
'tasks': [
'task1',
'task2',
'task3',
'task4'
]
}
if not values:
abort(404)
else:
return values
@wsme_pecan.wsexpose(wtypes.text, wtypes.text)
def get(self, name):
print("Task '%s' is starting" % name)
value = "Task %s accepted" % name
tasks.start_task(**self.get_mistral_headers())
return value
def get_mistral_headers(self):
headers = pecan.request.headers
try:
needed_headers = {
'workbook_name': headers['Mistral-Workbook-Name'],
'execution_id': headers['Mistral-Execution-Id'],
'task_id': headers['Mistral-Task-Id']
}
return needed_headers
except KeyError:
raise RuntimeError("Could not find http headers for "
"defining mistral task")