Documentation on goal and efficacy
In this changeset, I wrote a documentation detailing how one can implement a new goal plugin. I also mention to define the efficacy specification for a given goal. Partially Implements: blueprint efficacy-indicator Change-Id: Iba267ae312f248b49d4600504f11678cdc225622
@ -150,12 +150,14 @@ This database stores all the Watcher domain objects which can be requested
|
|||||||
by the :ref:`Watcher API <archi_watcher_api_definition>` or the
|
by the :ref:`Watcher API <archi_watcher_api_definition>` or the
|
||||||
:ref:`Watcher CLI <archi_watcher_cli_definition>`:
|
:ref:`Watcher CLI <archi_watcher_cli_definition>`:
|
||||||
|
|
||||||
|
- :ref:`Goals <goal_definition>`
|
||||||
|
- :ref:`Strategies <strategy_definition>`
|
||||||
- :ref:`Audit templates <audit_template_definition>`
|
- :ref:`Audit templates <audit_template_definition>`
|
||||||
- :ref:`Audits <audit_definition>`
|
- :ref:`Audits <audit_definition>`
|
||||||
- :ref:`Action plans <action_plan_definition>`
|
- :ref:`Action plans <action_plan_definition>`
|
||||||
|
- :ref:`Efficacy indicators <efficacy_indicator_definition>` via the Action
|
||||||
|
Plan API.
|
||||||
- :ref:`Actions <action_definition>`
|
- :ref:`Actions <action_definition>`
|
||||||
- :ref:`Goals <goal_definition>`
|
|
||||||
- :ref:`Strategies <strategy_definition>`
|
|
||||||
|
|
||||||
The Watcher domain being here "*optimization of some resources provided by an
|
The Watcher domain being here "*optimization of some resources provided by an
|
||||||
OpenStack system*".
|
OpenStack system*".
|
||||||
@ -210,10 +212,10 @@ view (Goals, Audits, Action Plans, ...):
|
|||||||
.. image:: ./images/functional_data_model.svg
|
.. image:: ./images/functional_data_model.svg
|
||||||
:width: 100%
|
:width: 100%
|
||||||
|
|
||||||
Here below is a class diagram representing the main objects in Watcher from a
|
Here below is a diagram representing the main objects in Watcher from a
|
||||||
database perspective:
|
database perspective:
|
||||||
|
|
||||||
.. image:: ./images/watcher_class_diagram.png
|
.. image:: ./images/watcher_db_schema_diagram.png
|
||||||
:width: 100%
|
:width: 100%
|
||||||
|
|
||||||
|
|
||||||
@ -297,9 +299,11 @@ This method finds an appropriate scheduling of
|
|||||||
:ref:`Actions <action_definition>` taking into account some scheduling rules
|
:ref:`Actions <action_definition>` taking into account some scheduling rules
|
||||||
(such as priorities between actions).
|
(such as priorities between actions).
|
||||||
It generates a new :ref:`Action Plan <action_plan_definition>` with status
|
It generates a new :ref:`Action Plan <action_plan_definition>` with status
|
||||||
**RECOMMENDED** and saves it into the
|
**RECOMMENDED** and saves it into the:ref:`Watcher Database
|
||||||
:ref:`Watcher Database <watcher_database_definition>`. The saved action plan is
|
<watcher_database_definition>`. The saved action plan is now a scheduled flow
|
||||||
now a scheduled flow of actions.
|
of actions to which a global efficacy is associated alongside a number of
|
||||||
|
:ref:`Efficacy Indicators <efficacy_indicator_definition>` as specified by the
|
||||||
|
related :ref:`goal <goal_definition>`.
|
||||||
|
|
||||||
If every step executed successfully, the
|
If every step executed successfully, the
|
||||||
:ref:`Watcher Decision Engine <watcher_decision_engine_definition>` updates
|
:ref:`Watcher Decision Engine <watcher_decision_engine_definition>` updates
|
||||||
@ -308,6 +312,11 @@ the current status of the Audit to **SUCCEEDED** in the
|
|||||||
on the bus to inform other components that the :ref:`Audit <audit_definition>`
|
on the bus to inform other components that the :ref:`Audit <audit_definition>`
|
||||||
was successful.
|
was successful.
|
||||||
|
|
||||||
|
This internal workflow the Decision Engine follows to conduct an audit can be
|
||||||
|
seen in the sequence diagram here below:
|
||||||
|
|
||||||
|
.. image:: ./images/sequence_from_audit_execution_to_actionplan_creation.png
|
||||||
|
:width: 100%
|
||||||
|
|
||||||
.. _sequence_diagrams_launch_action_plan:
|
.. _sequence_diagrams_launch_action_plan:
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
https://creativecommons.org/licenses/by/3.0/
|
https://creativecommons.org/licenses/by/3.0/
|
||||||
|
|
||||||
|
.. _implement_action_plugin:
|
||||||
|
|
||||||
==================
|
==================
|
||||||
Build a new action
|
Build a new action
|
||||||
==================
|
==================
|
||||||
|
215
doc/source/dev/plugin/goal-plugin.rst
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
..
|
||||||
|
Except where otherwise noted, this document is licensed under Creative
|
||||||
|
Commons Attribution 3.0 License. You can view the license at:
|
||||||
|
|
||||||
|
https://creativecommons.org/licenses/by/3.0/
|
||||||
|
|
||||||
|
.. _implement_goal_plugin:
|
||||||
|
|
||||||
|
================
|
||||||
|
Build a new goal
|
||||||
|
================
|
||||||
|
|
||||||
|
Watcher Decision Engine has an external :ref:`goal <goal_definition>`
|
||||||
|
plugin interface which gives anyone the ability to integrate an external
|
||||||
|
goal which can be achieved by a :ref:`strategy <strategy_definition>`.
|
||||||
|
|
||||||
|
This section gives some guidelines on how to implement and integrate custom
|
||||||
|
goals with Watcher. If you wish to create a third-party package for your
|
||||||
|
plugin, you can refer to our :ref:`documentation for third-party package
|
||||||
|
creation <plugin-base_setup>`.
|
||||||
|
|
||||||
|
|
||||||
|
Pre-requisites
|
||||||
|
==============
|
||||||
|
|
||||||
|
Before using any goal, please make sure that none of the existing goals fit
|
||||||
|
your needs. Indeed, the underlying value of defining a goal is to be able to
|
||||||
|
compare the efficacy of the action plans resulting from the various strategies
|
||||||
|
satisfying the same goal. By doing so, Watcher can assist the administrator
|
||||||
|
in his choices.
|
||||||
|
|
||||||
|
|
||||||
|
Create a new plugin
|
||||||
|
===================
|
||||||
|
|
||||||
|
In order to create a new goal, you have to:
|
||||||
|
|
||||||
|
- Extend the :py:class:`~.base.Goal` class.
|
||||||
|
- Implement its :py:meth:`~.Goal.get_name` class method to return the
|
||||||
|
**unique** ID of the new goal you want to create. This unique ID should
|
||||||
|
be the same as the name of :ref:`the entry point you will declare later on
|
||||||
|
<goal_plugin_add_entrypoint>`.
|
||||||
|
- Implement its :py:meth:`~.Goal.get_display_name` class method to
|
||||||
|
return the translated display name of the goal you want to create.
|
||||||
|
Note: Do not use a variable to return the translated string so it can be
|
||||||
|
automatically collected by the translation tool.
|
||||||
|
- Implement its :py:meth:`~.Goal.get_translatable_display_name`
|
||||||
|
class method to return the translation key (actually the english display
|
||||||
|
name) of your new goal. The value return should be the same as the
|
||||||
|
string translated in :py:meth:`~.Goal.get_display_name`.
|
||||||
|
- Implement its :py:meth:`~.Goal.get_efficacy_specification` method to return
|
||||||
|
the :ref:`efficacy specification <efficacy_specification_definition>` for
|
||||||
|
your goal.
|
||||||
|
|
||||||
|
Here is an example showing how you can define a new ``NewGoal`` goal plugin:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
# filepath: thirdparty/new.py
|
||||||
|
# import path: thirdparty.new
|
||||||
|
|
||||||
|
from watcher._i18n import _
|
||||||
|
from watcher.decision_engine.goal.efficacy import specs
|
||||||
|
from watcher.decision_engine.strategy.strategies import base
|
||||||
|
|
||||||
|
class NewGoal(base.Goal):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_name(cls):
|
||||||
|
return "new_goal" # Will be the name of the entry point
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_display_name(cls):
|
||||||
|
return _("New Goal")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_translatable_display_name(cls):
|
||||||
|
return "New Goal"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_efficacy_specification(cls):
|
||||||
|
return specs.UnclassifiedStrategySpecification()
|
||||||
|
|
||||||
|
|
||||||
|
As you may have noticed, the :py:meth:`~.Goal.get_efficacy_specification`
|
||||||
|
method returns an :py:meth:`~.UnclassifiedStrategySpecification` instance which
|
||||||
|
is provided by Watcher. This efficacy specification is useful during the
|
||||||
|
development process of your goal as it corresponds to an empty specification.
|
||||||
|
If you want to learn more about what efficacy specifications are used for or to
|
||||||
|
define your own efficacy specification, please refer to the :ref:`related
|
||||||
|
section below <implement_efficacy_specification>`.
|
||||||
|
|
||||||
|
|
||||||
|
Abstract Plugin Class
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Here below is the abstract :py:class:`~.base.Goal` class:
|
||||||
|
|
||||||
|
.. autoclass:: watcher.decision_engine.goal.base.Goal
|
||||||
|
:members:
|
||||||
|
:noindex:
|
||||||
|
|
||||||
|
.. _goal_plugin_add_entrypoint:
|
||||||
|
|
||||||
|
Add a new entry point
|
||||||
|
=====================
|
||||||
|
|
||||||
|
In order for the Watcher Decision Engine to load your new goal, the
|
||||||
|
goal must be registered as a named entry point under the ``watcher_goals``
|
||||||
|
entry point namespace of your ``setup.py`` file. If you are using pbr_, this
|
||||||
|
entry point should be placed in your ``setup.cfg`` file.
|
||||||
|
|
||||||
|
The name you give to your entry point has to be unique and should be the same
|
||||||
|
as the value returned by the :py:meth:`~.base.Goal.get_name` class method of
|
||||||
|
your goal.
|
||||||
|
|
||||||
|
Here below is how you would proceed to register ``NewGoal`` using pbr_:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[entry_points]
|
||||||
|
watcher_goals =
|
||||||
|
new_goal = thirdparty.new:NewGoal
|
||||||
|
|
||||||
|
|
||||||
|
To get a better understanding on how to implement a more advanced goal,
|
||||||
|
have a look at the :py:class:`~.ServerConsolidation` class.
|
||||||
|
|
||||||
|
.. _pbr: http://docs.openstack.org/developer/pbr/
|
||||||
|
|
||||||
|
.. _implement_efficacy_specification:
|
||||||
|
|
||||||
|
Implement a customized efficacy specification
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
What is it for?
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Efficacy specifications define a set of specifications for a given goal.
|
||||||
|
These specifications actually define a list of indicators which are to be used
|
||||||
|
to compute a global efficacy that outlines how well a strategy performed when
|
||||||
|
trying to achieve the goal it is associated to.
|
||||||
|
|
||||||
|
The idea behind such specification is to give the administrator the possibility
|
||||||
|
to run an audit using different strategies satisfying the same goal and be able
|
||||||
|
to judge how they performed at a glance.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
--------------
|
||||||
|
|
||||||
|
In order to create a new efficacy specification, you have to:
|
||||||
|
|
||||||
|
- Extend the :py:class:`~.EfficacySpecification` class.
|
||||||
|
- Implement :py:meth:`~.EfficacySpecification.get_indicators_specifications`
|
||||||
|
by returning a list of :py:class:`~.IndicatorSpecification` instances.
|
||||||
|
|
||||||
|
* Each :py:class:`~.IndicatorSpecification` instance should actually extend
|
||||||
|
the latter.
|
||||||
|
* Each indicator specification should have a **unique name** which should be
|
||||||
|
a valid Python variable name.
|
||||||
|
* They should implement the :py:attr:`~.EfficacySpecification.schema`
|
||||||
|
abstract property by returning a :py:class:`~.voluptuous.Schema` instance.
|
||||||
|
This schema is the contract the strategy will have to comply with when
|
||||||
|
setting the value associated to the indicator specification within its
|
||||||
|
solution (see the :ref:`architecture of Watcher
|
||||||
|
<sequence_diagrams_create_and_launch_audit>` for more information on
|
||||||
|
the audit execution workflow).
|
||||||
|
|
||||||
|
- Implement the :py:meth:`~.EfficacySpecification.get_global_efficacy` method:
|
||||||
|
it should compute the global efficacy for the goal it achieves based on the
|
||||||
|
efficacy indicators you just defined.
|
||||||
|
|
||||||
|
Here below is an example of an efficacy specification containing one indicator
|
||||||
|
specification:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from watcher._i18n import _
|
||||||
|
from watcher.decision_engine.goal.efficacy import base as efficacy_base
|
||||||
|
from watcher.decision_engine.goal.efficacy import indicators
|
||||||
|
from watcher.decision_engine.solution import efficacy
|
||||||
|
|
||||||
|
|
||||||
|
class IndicatorExample(IndicatorSpecification):
|
||||||
|
def __init__(self):
|
||||||
|
super(IndicatorExample, self).__init__(
|
||||||
|
name="indicator_example",
|
||||||
|
description=_("Example of indicator specification."),
|
||||||
|
unit=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def schema(self):
|
||||||
|
return voluptuous.Schema(voluptuous.Range(min=0), required=True)
|
||||||
|
|
||||||
|
|
||||||
|
class UnclassifiedStrategySpecification(efficacy_base.EfficacySpecification):
|
||||||
|
|
||||||
|
def get_indicators_specifications(self):
|
||||||
|
return [IndicatorExample()]
|
||||||
|
|
||||||
|
def get_global_efficacy(self, indicators_map):
|
||||||
|
return efficacy.Indicator(
|
||||||
|
name="global_efficacy_indicator",
|
||||||
|
description="Example of global efficacy indicator",
|
||||||
|
unit="%",
|
||||||
|
value=indicators_map.indicator_example % 100)
|
||||||
|
|
||||||
|
|
||||||
|
To get a better understanding on how to implement an efficacy specification,
|
||||||
|
have a look at :py:class:`~.ServerConsolidationSpecification`.
|
||||||
|
|
||||||
|
Also, if you want to see a concrete example of an indicator specification,
|
||||||
|
have a look at :py:class:`~.ReleasedComputeNodesCount`.
|
@ -11,9 +11,10 @@ Build a new planner
|
|||||||
===================
|
===================
|
||||||
|
|
||||||
Watcher :ref:`Decision Engine <watcher_decision_engine_definition>` has an
|
Watcher :ref:`Decision Engine <watcher_decision_engine_definition>` has an
|
||||||
external :ref:`planner <planner_definition>` plugin interface which gives
|
external :ref:`planner <watcher_planner_definition>` plugin interface which
|
||||||
anyone the ability to integrate an external :ref:`planner <planner_definition>`
|
gives anyone the ability to integrate an external :ref:`planner
|
||||||
in order to extend the initial set of planners Watcher provides.
|
<watcher_planner_definition>` in order to extend the initial set of planners
|
||||||
|
Watcher provides.
|
||||||
|
|
||||||
This section gives some guidelines on how to implement and integrate custom
|
This section gives some guidelines on how to implement and integrate custom
|
||||||
planners with Watcher.
|
planners with Watcher.
|
||||||
|
@ -28,8 +28,8 @@ configured so that it would provide you all the metrics you need to be able to
|
|||||||
use your strategy.
|
use your strategy.
|
||||||
|
|
||||||
|
|
||||||
Create a new plugin
|
Create a new strategy plugin
|
||||||
===================
|
============================
|
||||||
|
|
||||||
In order to create a new strategy, you have to:
|
In order to create a new strategy, you have to:
|
||||||
|
|
||||||
@ -53,6 +53,8 @@ Here is an example showing how you can write a plugin called ``NewStrategy``:
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
# filepath: thirdparty/new.py
|
||||||
|
# import path: thirdparty.new
|
||||||
import abc
|
import abc
|
||||||
|
|
||||||
import six
|
import six
|
||||||
@ -88,9 +90,12 @@ Here is an example showing how you can write a plugin called ``NewStrategy``:
|
|||||||
As you can see in the above example, the :py:meth:`~.BaseStrategy.execute`
|
As you can see in the above example, the :py:meth:`~.BaseStrategy.execute`
|
||||||
method returns a :py:class:`~.BaseSolution` instance as required. This solution
|
method returns a :py:class:`~.BaseSolution` instance as required. This solution
|
||||||
is what wraps the abstract set of actions the strategy recommends to you. This
|
is what wraps the abstract set of actions the strategy recommends to you. This
|
||||||
solution is then processed by a :ref:`planner <planner_definition>` to produce
|
solution is then processed by a :ref:`planner <watcher_planner_definition>` to
|
||||||
an action plan which contains the sequenced flow of actions to be
|
produce an action plan which contains the sequenced flow of actions to be
|
||||||
executed by the :ref:`Watcher Applier <watcher_applier_definition>`.
|
executed by the :ref:`Watcher Applier <watcher_applier_definition>`. This
|
||||||
|
solution also contains the various :ref:`efficacy indicators
|
||||||
|
<efficacy_indicator_definition>` alongside its computed :ref:`global efficacy
|
||||||
|
<efficacy_definition>`.
|
||||||
|
|
||||||
Please note that your strategy class will expect to find the same constructor
|
Please note that your strategy class will expect to find the same constructor
|
||||||
signature as BaseStrategy to instantiate you strategy. Therefore, you should
|
signature as BaseStrategy to instantiate you strategy. Therefore, you should
|
||||||
@ -98,7 +103,7 @@ ensure that your ``__init__`` signature is identical to the
|
|||||||
:py:class:`~.BaseStrategy` one.
|
:py:class:`~.BaseStrategy` one.
|
||||||
|
|
||||||
|
|
||||||
Create a new goal
|
Strategy efficacy
|
||||||
=================
|
=================
|
||||||
|
|
||||||
As stated before, the ``NewStrategy`` class extends a class called
|
As stated before, the ``NewStrategy`` class extends a class called
|
||||||
@ -106,126 +111,12 @@ As stated before, the ``NewStrategy`` class extends a class called
|
|||||||
abstract methods which are defined within the :py:class:`~.BaseStrategy` parent
|
abstract methods which are defined within the :py:class:`~.BaseStrategy` parent
|
||||||
class.
|
class.
|
||||||
|
|
||||||
Once you are confident in your strategy plugin, the next step is now to
|
One thing this :py:class:`~.UnclassifiedStrategy` class defines is that our
|
||||||
classify your goal by assigning it a proper goal. To do so, you can either
|
``NewStrategy`` achieves the ``unclassified`` goal. This goal is a peculiar one
|
||||||
reuse existing goals defined in Watcher. As of now, four goal-oriented abstract
|
as it does not contain any indicator nor does it calculate a global efficacy.
|
||||||
classes are defined in Watcher:
|
This proves itself to be quite useful during the development of a new strategy
|
||||||
|
for which the goal has yet to be defined or in case a :ref:`new goal
|
||||||
- :py:class:`~.UnclassifiedStrategy` which is the one I mentioned up until now.
|
<implement_goal_plugin>` has yet to be implemented.
|
||||||
- :py:class:`~.DummyBaseStrategy` which is used by :py:class:`~.DummyStrategy`
|
|
||||||
for testing purposes.
|
|
||||||
- :py:class:`~.ServerConsolidationBaseStrategy`
|
|
||||||
- :py:class:`~.ThermalOptimizationBaseStrategy`
|
|
||||||
|
|
||||||
If none of the above actually correspond to the goal your new strategy
|
|
||||||
achieves, you can define a brand new one. To do so, you need to:
|
|
||||||
|
|
||||||
- Extend the :py:class:`~.BaseStrategy` class to make your new goal-oriented
|
|
||||||
strategy abstract class :
|
|
||||||
- Implement its :py:meth:`~.BaseStrategy.get_goal_name` class method to
|
|
||||||
return the **unique** ID of the goal you want to achieve.
|
|
||||||
- Implement its :py:meth:`~.BaseStrategy.get_goal_display_name` class method
|
|
||||||
to return the translated display name of the goal you want to achieve.
|
|
||||||
Note: Do not use a variable to return the translated string so it can be
|
|
||||||
automatically collected by the translation tool.
|
|
||||||
- Implement its :py:meth:`~.BaseStrategy.get_translatable_goal_display_name`
|
|
||||||
class method to return the goal translation key (actually the english
|
|
||||||
display name). The value return should be the same as the string translated
|
|
||||||
in :py:meth:`~.BaseStrategy.get_goal_display_name`.
|
|
||||||
|
|
||||||
Here is an example showing how you can define a new ``NEW_GOAL`` goal and
|
|
||||||
modify your ``NewStrategy`` plugin so it now achieves the latter:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
import abc
|
|
||||||
|
|
||||||
import six
|
|
||||||
|
|
||||||
from watcher._i18n import _
|
|
||||||
from watcher.decision_engine.strategy.strategies import base
|
|
||||||
|
|
||||||
@six.add_metaclass(abc.ABCMeta)
|
|
||||||
class NewGoalBaseStrategy(base.BaseStrategy):
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_goal_name(cls):
|
|
||||||
return "NEW_GOAL"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_goal_display_name(cls):
|
|
||||||
return _("New goal")
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_translatable_goal_display_name(cls):
|
|
||||||
return "New goal"
|
|
||||||
|
|
||||||
|
|
||||||
class NewStrategy(NewGoalBaseStrategy):
|
|
||||||
|
|
||||||
def __init__(self, config, osc=None):
|
|
||||||
super(NewStrategy, self).__init__(config, osc)
|
|
||||||
|
|
||||||
def execute(self, original_model):
|
|
||||||
self.solution.add_action(action_type="nop",
|
|
||||||
input_parameters=parameters)
|
|
||||||
# Do some more stuff here ...
|
|
||||||
return self.solution
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_name(cls):
|
|
||||||
return "new_strategy"
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_display_name(cls):
|
|
||||||
return _("New strategy")
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_translatable_display_name(cls):
|
|
||||||
return "New strategy"
|
|
||||||
|
|
||||||
|
|
||||||
Define configuration parameters
|
|
||||||
===============================
|
|
||||||
|
|
||||||
At this point, you have a fully functional strategy. However, in more complex
|
|
||||||
implementation, you may want to define some configuration options so one can
|
|
||||||
tune the strategy to its needs. To do so, you can implement the
|
|
||||||
:py:meth:`~.Loadable.get_config_opts` class method as followed:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from oslo_config import cfg
|
|
||||||
|
|
||||||
class NewStrategy(NewGoalBaseStrategy):
|
|
||||||
|
|
||||||
# [...]
|
|
||||||
|
|
||||||
def execute(self, original_model):
|
|
||||||
assert self.config.test_opt == 0
|
|
||||||
# [...]
|
|
||||||
|
|
||||||
def get_config_opts(self):
|
|
||||||
return [
|
|
||||||
cfg.StrOpt('test_opt', help="Demo Option.", default=0),
|
|
||||||
# Some more options ...
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
The configuration options defined within this class method will be included
|
|
||||||
within the global ``watcher.conf`` configuration file under a section named by
|
|
||||||
convention: ``{namespace}.{plugin_name}``. In our case, the ``watcher.conf``
|
|
||||||
configuration would have to be modified as followed:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[watcher_strategies.new_strategy]
|
|
||||||
# Option used for testing.
|
|
||||||
test_opt = test_value
|
|
||||||
|
|
||||||
Then, the configuration options you define within this method will then be
|
|
||||||
injected in each instantiated object via the ``config`` parameter of the
|
|
||||||
:py:meth:`~.BaseStrategy.__init__` method.
|
|
||||||
|
|
||||||
|
|
||||||
Abstract Plugin Class
|
Abstract Plugin Class
|
||||||
@ -249,16 +140,16 @@ strategy must be registered as a named entry point under the
|
|||||||
pbr_, this entry point should be placed in your ``setup.cfg`` file.
|
pbr_, this entry point should be placed in your ``setup.cfg`` file.
|
||||||
|
|
||||||
The name you give to your entry point has to be unique and should be the same
|
The name you give to your entry point has to be unique and should be the same
|
||||||
as the value returned by the :py:meth:`~.BaseStrategy.get_id` class method of
|
as the value returned by the :py:meth:`~.BaseStrategy.get_name` class method of
|
||||||
your strategy.
|
your strategy.
|
||||||
|
|
||||||
Here below is how you would proceed to register ``DummyStrategy`` using pbr_:
|
Here below is how you would proceed to register ``NewStrategy`` using pbr_:
|
||||||
|
|
||||||
.. code-block:: ini
|
.. code-block:: ini
|
||||||
|
|
||||||
[entry_points]
|
[entry_points]
|
||||||
watcher_strategies =
|
watcher_strategies =
|
||||||
dummy_strategy = thirdparty.dummy:DummyStrategy
|
new_strategy = thirdparty.new:NewStrategy
|
||||||
|
|
||||||
|
|
||||||
To get a better understanding on how to implement a more advanced strategy,
|
To get a better understanding on how to implement a more advanced strategy,
|
||||||
|
@ -13,6 +13,13 @@ In this section we present all the plugins that are shipped along with Watcher.
|
|||||||
If you want to know which plugins your Watcher services have access to, you can
|
If you want to know which plugins your Watcher services have access to, you can
|
||||||
use the :ref:`Guru Meditation Reports <watcher_gmr>` to display them.
|
use the :ref:`Guru Meditation Reports <watcher_gmr>` to display them.
|
||||||
|
|
||||||
|
.. _watcher_goals:
|
||||||
|
|
||||||
|
Goals
|
||||||
|
=====
|
||||||
|
|
||||||
|
.. drivers-doc:: watcher_goals
|
||||||
|
|
||||||
.. _watcher_strategies:
|
.. _watcher_strategies:
|
||||||
|
|
||||||
Strategies
|
Strategies
|
||||||
|
@ -131,7 +131,8 @@ can potentially be hosted on a dedicated machine.
|
|||||||
Compute node
|
Compute node
|
||||||
============
|
============
|
||||||
|
|
||||||
Please, read `the official OpenStack definition of a Compute Node <http://docs.openstack.org/openstack-ops/content/compute_nodes.html>`_.
|
Please, read `the official OpenStack definition of a Compute Node
|
||||||
|
<http://docs.openstack.org/openstack-ops/content/compute_nodes.html>`_.
|
||||||
|
|
||||||
.. _customer_definition:
|
.. _customer_definition:
|
||||||
|
|
||||||
@ -211,7 +212,23 @@ Here are some examples of
|
|||||||
- `Sahara Hadoop Cluster <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Sahara::Cluster>`_
|
- `Sahara Hadoop Cluster <http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Sahara::Cluster>`_
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
It can be any of the `the official list of available resource types defined in OpenStack for HEAT <http://docs.openstack.org/developer/heat/template_guide/openstack.html>`_.
|
It can be any of the `the official list of available resource types defined in
|
||||||
|
OpenStack for HEAT
|
||||||
|
<http://docs.openstack.org/developer/heat/template_guide/openstack.html>`_.
|
||||||
|
|
||||||
|
.. _efficacy_indicator_definition:
|
||||||
|
|
||||||
|
Efficacy Indicator
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. watcher-term:: watcher.api.controllers.v1.efficacy_indicator
|
||||||
|
|
||||||
|
.. _efficacy_specification_definition:
|
||||||
|
|
||||||
|
Efficacy Specification
|
||||||
|
======================
|
||||||
|
|
||||||
|
.. watcher-term:: watcher.api.controllers.v1.efficacy_specification
|
||||||
|
|
||||||
.. _efficacy_definition:
|
.. _efficacy_definition:
|
||||||
|
|
||||||
@ -234,14 +251,15 @@ to be launched).
|
|||||||
|
|
||||||
For example, if the :ref:`Goal <goal_definition>` is to lower the energy
|
For example, if the :ref:`Goal <goal_definition>` is to lower the energy
|
||||||
consumption, the :ref:`Efficacy <efficacy_definition>` will be computed
|
consumption, the :ref:`Efficacy <efficacy_definition>` will be computed
|
||||||
using several indicators (KPIs):
|
using several :ref:`efficacy indicators <efficacy_indicator_definition>`
|
||||||
|
(KPIs):
|
||||||
|
|
||||||
- the percentage of energy gain (which must be the highest possible)
|
- the percentage of energy gain (which must be the highest possible)
|
||||||
- the number of :ref:`SLA violations <sla_violation_definition>`
|
- the number of :ref:`SLA violations <sla_violation_definition>`
|
||||||
(which must be the lowest possible)
|
(which must be the lowest possible)
|
||||||
- the number of virtual machine migrations (which must be the lowest possible)
|
- the number of virtual machine migrations (which must be the lowest possible)
|
||||||
|
|
||||||
All those indicators (KPIs) are computed within a given timeframe, which is the
|
All those indicators are computed within a given timeframe, which is the
|
||||||
time taken to execute the whole :ref:`Action Plan <action_plan_definition>`.
|
time taken to execute the whole :ref:`Action Plan <action_plan_definition>`.
|
||||||
|
|
||||||
The efficacy also enables the :ref:`Administrator <administrator_definition>`
|
The efficacy also enables the :ref:`Administrator <administrator_definition>`
|
||||||
@ -259,7 +277,8 @@ OpenStack should be owned by a specific :ref:`project <project_definition>`.
|
|||||||
In OpenStack Identity, a :ref:`project <project_definition>` must be owned by a
|
In OpenStack Identity, a :ref:`project <project_definition>` must be owned by a
|
||||||
specific domain.
|
specific domain.
|
||||||
|
|
||||||
Please, read `the official OpenStack definition of a Project <http://docs.openstack.org/glossary/content/glossary.html>`_.
|
Please, read `the official OpenStack definition of a Project
|
||||||
|
<http://docs.openstack.org/glossary/content/glossary.html>`_.
|
||||||
|
|
||||||
|
|
||||||
.. _sla_definition:
|
.. _sla_definition:
|
||||||
@ -364,4 +383,3 @@ Watcher Planner
|
|||||||
===============
|
===============
|
||||||
|
|
||||||
.. watcher-term:: watcher.decision_engine.planner.base
|
.. watcher-term:: watcher.decision_engine.planner.base
|
||||||
|
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
skinparam maxMessageSize 200
|
||||||
|
|
||||||
|
"Decision Engine" -> "Decision Engine" : Execute audit
|
||||||
|
activate "Decision Engine"
|
||||||
|
"Decision Engine" -> "Decision Engine" : Set the audit state to ONGOING
|
||||||
|
|
||||||
|
"Decision Engine" -> "Strategy selector" : Select strategy
|
||||||
|
activate "Strategy selector"
|
||||||
|
alt A specific strategy is provided
|
||||||
|
"Strategy selector" -> "Strategy selector" : Load strategy and inject the \
|
||||||
|
cluster data model
|
||||||
|
else Only a goal is specified
|
||||||
|
"Strategy selector" -> "Strategy selector" : select strategy
|
||||||
|
"Strategy selector" -> "Strategy selector" : Load strategy and inject the \
|
||||||
|
cluster data model
|
||||||
|
end
|
||||||
|
"Strategy selector" -> "Decision Engine" : Return loaded Strategy
|
||||||
|
deactivate "Strategy selector"
|
||||||
|
|
||||||
|
"Decision Engine" -> "Strategy" : Execute the strategy
|
||||||
|
activate "Strategy"
|
||||||
|
"Strategy" -> "Strategy" : **pre_execute()**Checks if the strategy \
|
||||||
|
pre-requisites are all set.
|
||||||
|
"Strategy" -> "Strategy" : **do_execute()**Contains the logic of the strategy
|
||||||
|
"Strategy" -> "Strategy" : **post_execute()** Set the efficacy indicators
|
||||||
|
"Strategy" -> "Strategy" : Compute the global efficacy of the solution \
|
||||||
|
based on the provided efficacy indicators
|
||||||
|
"Strategy" -> "Decision Engine" : Return the solution
|
||||||
|
deactivate "Strategy"
|
||||||
|
|
||||||
|
"Decision Engine" -> "Planner" : Plan the solution that was computed by the \
|
||||||
|
strategy
|
||||||
|
activate "Planner"
|
||||||
|
"Planner" -> "Planner" : Store the planned solution as an action plan with its \
|
||||||
|
related actions and efficacy indicators
|
||||||
|
"Planner" --> "Decision Engine" : Done
|
||||||
|
deactivate "Planner"
|
||||||
|
"Decision Engine" -> "Decision Engine" : Update the audit state to SUCCEEDED
|
||||||
|
|
||||||
|
deactivate "Decision Engine"
|
||||||
|
|
||||||
|
@enduml
|
@ -1,31 +1,54 @@
|
|||||||
@startuml
|
@startuml
|
||||||
|
|
||||||
"AMQP Bus" -> "Watcher Decision Engine" : trigger_audit(new_audit.uuid)
|
skinparam maxMessageSize 100
|
||||||
"Watcher Decision Engine" -> "Watcher Database" : update audit.state = ONGOING
|
|
||||||
"AMQP Bus" <[#blue]- "Watcher Decision Engine" : notify new audit state = ONGOING
|
"AMQP Bus" -> "Decision Engine" : trigger audit
|
||||||
"Watcher Decision Engine" -> "Watcher Database" : get audit parameters(goal, ...)
|
|
||||||
"Watcher Decision Engine" <-- "Watcher Database" : audit parameters(goal, ...)
|
activate "Decision Engine"
|
||||||
|
|
||||||
|
"Decision Engine" -> "Database" : update audit.state = ONGOING
|
||||||
|
"AMQP Bus" <[#blue]- "Decision Engine" : notify new audit state = ONGOING
|
||||||
|
"Decision Engine" -> "Database" : get audit parameters (goal, strategy, ...)
|
||||||
|
"Decision Engine" <-- "Database" : audit parameters (goal, strategy, ...)
|
||||||
|
"Decision Engine" --> "Decision Engine": select appropriate \
|
||||||
|
optimization strategy (via the Strategy Selector)
|
||||||
create Strategy
|
create Strategy
|
||||||
"Watcher Decision Engine" -[#red]> "Strategy": select appropriate\noptimization strategy
|
"Decision Engine" -> "Strategy" : execute()
|
||||||
loop while enough data to build cluster data model
|
activate "Strategy"
|
||||||
"Watcher Decision Engine" -> "Nova API" : get resource state (host, instance, ...)
|
create "Cluster Data Model Collector"
|
||||||
"Watcher Decision Engine" <-- "Nova API" : resource state
|
"Strategy" -> "Cluster Data Model Collector" : get cluster data model
|
||||||
end
|
|
||||||
"Watcher Decision Engine" -[#red]> "Watcher Decision Engine": build cluster_data_model
|
activate "Cluster Data Model Collector"
|
||||||
"Watcher Decision Engine" -> "Strategy" : execute(cluster_data_model)
|
loop while enough data to build cluster data model
|
||||||
|
"Cluster Data Model Collector" -> "Nova API" : get resource state (\
|
||||||
|
host, instance, ...)
|
||||||
|
"Cluster Data Model Collector" <-- "Nova API" : resource state
|
||||||
|
end
|
||||||
|
"Cluster Data Model Collector" -> "Strategy" : cluster data model
|
||||||
|
deactivate "Cluster Data Model Collector"
|
||||||
|
|
||||||
loop while enough history data for the strategy
|
loop while enough history data for the strategy
|
||||||
"Strategy" -> "Ceilometer API": get_aggregated_metrics\n(resource_id,meter_name,period,aggregate_method)
|
"Strategy" -> "Ceilometer API": get necessary metrics
|
||||||
"Strategy" <-- "Ceilometer API": aggregated metrics
|
"Strategy" <-- "Ceilometer API": aggregated metrics
|
||||||
end
|
end
|
||||||
"Strategy" -> "Strategy" : compute solution to achieve goal
|
"Strategy" -> "Strategy" : compute/set needed actions for the solution \
|
||||||
"Watcher Decision Engine" <-- "Strategy" : solution = array of actions (i.e. not scheduled yet)
|
so it achieves its goal
|
||||||
create "Watcher Planner"
|
"Strategy" -> "Strategy" : compute/set efficacy indicators for the solution
|
||||||
"Watcher Decision Engine" -[#red]> "Watcher Planner": select appropriate actions scheduler (i.e. Planner implementation)
|
"Strategy" -> "Strategy" : compute/set the solution global efficacy
|
||||||
"Watcher Decision Engine" -> "Watcher Planner": schedule(audit_id, solution)
|
"Decision Engine" <-- "Strategy" : solution (contains a list of unordered \
|
||||||
"Watcher Planner" -> "Watcher Planner": schedule actions according to\nscheduling rules/policies
|
actions alongside its efficacy indicators as well as its global efficacy)
|
||||||
"Watcher Decision Engine" <-- "Watcher Planner": new action_plan
|
deactivate "Strategy"
|
||||||
"Watcher Decision Engine" -> "Watcher Database" : save new action_plan in database
|
|
||||||
"Watcher Decision Engine" -> "Watcher Database" : update audit.state = SUCCEEDED
|
"Decision Engine" --> "Planner": load actions scheduler (i.e. Planner plugin)
|
||||||
"AMQP Bus" <[#blue]- "Watcher Decision Engine" : notify new audit state = SUCCEEDED
|
create "Planner"
|
||||||
|
"Decision Engine" -> "Planner": schedule()
|
||||||
|
"Planner" -> "Planner": schedule actions according to \
|
||||||
|
scheduling rules/policies
|
||||||
|
"Decision Engine" <-- "Planner": new action plan
|
||||||
|
"Decision Engine" -> "Database" : save new action plan in database
|
||||||
|
"Decision Engine" -> "Database" : update audit.state = SUCCEEDED
|
||||||
|
"AMQP Bus" <[#blue]- "Decision Engine" : notify new audit state = SUCCEEDED
|
||||||
|
|
||||||
|
deactivate "Decision Engine"
|
||||||
|
|
||||||
@enduml
|
@enduml
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
@startuml
|
|
||||||
|
|
||||||
abstract class Base {
|
|
||||||
// Timestamp mixin
|
|
||||||
DateTime created_at
|
|
||||||
DateTime updated_at
|
|
||||||
|
|
||||||
// Soft Delete mixin
|
|
||||||
DateTime deleted_at
|
|
||||||
Integer deleted // default = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
class Strategy {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36
|
|
||||||
String name // length = 63, nullable = false
|
|
||||||
String display_name // length = 63, nullable = false
|
|
||||||
<i>Integer goal_id</i> // ForeignKey('goals.id'), nullable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Goal {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36
|
|
||||||
String name // length = 63, nullable = false
|
|
||||||
String display_name // length = 63, nullable=False
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class AuditTemplate {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36
|
|
||||||
String name // length = 63, nullable = true
|
|
||||||
String description // length = 255, nullable = true
|
|
||||||
Integer host_aggregate // nullable = true
|
|
||||||
<i>Integer goal_id</i> // ForeignKey('goals.id'), nullable = false
|
|
||||||
<i>Integer strategy_id</i> // ForeignKey('strategies.id'), nullable = true
|
|
||||||
JsonString extra
|
|
||||||
String version // length = 15, nullable = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Audit {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36
|
|
||||||
String type // length = 20
|
|
||||||
String state // length = 20, nullable = true
|
|
||||||
DateTime deadline // nullable = true
|
|
||||||
<i>Integer audit_template_id</i> // ForeignKey('audit_templates.id') \
|
|
||||||
nullable = false
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Action {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36, nullable = false
|
|
||||||
<i>Integer action_plan_id</i> // ForeignKey('action_plans.id'), nullable = false
|
|
||||||
String action_type // length = 255, nullable = false
|
|
||||||
JsonString input_parameters // nullable = true
|
|
||||||
String state // length = 20, nullable = true
|
|
||||||
String next // length = 36, nullable = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class ActionPlan {
|
|
||||||
**Integer id** // primary_key
|
|
||||||
String uuid // length = 36
|
|
||||||
Integer first_action_id //
|
|
||||||
<i>Integer audit_id</i> // ForeignKey('audits.id'), nullable = true
|
|
||||||
String state // length = 20, nullable = true
|
|
||||||
}
|
|
||||||
|
|
||||||
"Base" <|-- "Strategy"
|
|
||||||
"Base" <|-- "Goal"
|
|
||||||
"Base" <|-- "AuditTemplate"
|
|
||||||
"Base" <|-- "Audit"
|
|
||||||
"Base" <|-- "Action"
|
|
||||||
"Base" <|-- "ActionPlan"
|
|
||||||
|
|
||||||
"Goal" <.. "Strategy" : Foreign Key
|
|
||||||
"Goal" <.. "AuditTemplate" : Foreign Key
|
|
||||||
"Strategy" <.. "AuditTemplate" : Foreign Key
|
|
||||||
"AuditTemplate" <.. "Audit" : Foreign Key
|
|
||||||
"ActionPlan" <.. "Action" : Foreign Key
|
|
||||||
"Audit" <.. "ActionPlan" : Foreign Key
|
|
||||||
|
|
||||||
@enduml
|
|
122
doc/source/image_src/plantuml/watcher_db_schema_diagram.txt
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
@startuml
|
||||||
|
!define table(x) class x << (T,#FFAAAA) >>
|
||||||
|
!define primary_key(x) <u>x</u>
|
||||||
|
!define foreign_key(x) <i><u>x</u></i>
|
||||||
|
hide methods
|
||||||
|
hide stereotypes
|
||||||
|
|
||||||
|
table(goal) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
uuid : String[36]
|
||||||
|
name : String[63]
|
||||||
|
display_name : String[63]
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(strategy) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key(goal_id : Integer)
|
||||||
|
uuid : String[36]
|
||||||
|
name : String[63]
|
||||||
|
display_name : String[63]
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(audit_template) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key("goal_id : Integer")
|
||||||
|
foreign_key("strategy_id : Integer, nullable")
|
||||||
|
uuid : String[36]
|
||||||
|
name : String[63], nullable
|
||||||
|
description : String[255], nullable
|
||||||
|
host_aggregate : Integer, nullable
|
||||||
|
extra : JSONEncodedDict
|
||||||
|
version : String[15], nullable
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(audit) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key("audit_template_id : Integer")
|
||||||
|
uuid : String[36]
|
||||||
|
type : String[20]
|
||||||
|
state : String[20], nullable
|
||||||
|
deadline :DateTime, nullable
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(action_plan) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key("audit_id : Integer, nullable")
|
||||||
|
uuid : String[36]
|
||||||
|
first_action_id : Integer
|
||||||
|
state : String[20], nullable
|
||||||
|
global_efficacy : JSONEncodedDict, nullable
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(action) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key("action_plan_id : Integer")
|
||||||
|
uuid : String[36]
|
||||||
|
action_type : String[255]
|
||||||
|
input_parameters : JSONEncodedDict, nullable
|
||||||
|
state : String[20], nullable
|
||||||
|
next : String[36], nullable
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table(efficacy_indicator) {
|
||||||
|
primary_key(id: Integer)
|
||||||
|
foreign_key("action_plan_id : Integer")
|
||||||
|
uuid : String[36]
|
||||||
|
name : String[63]
|
||||||
|
description : String[255], nullable
|
||||||
|
unit : String[63], nullable
|
||||||
|
value : Numeric
|
||||||
|
|
||||||
|
created_at : DateTime
|
||||||
|
updated_at : DateTime
|
||||||
|
deleted_at : DateTime
|
||||||
|
deleted : Integer
|
||||||
|
}
|
||||||
|
|
||||||
|
"goal" <.. "strategy" : Foreign Key
|
||||||
|
"goal" <.. "audit_template" : Foreign Key
|
||||||
|
"strategy" <.. "audit_template" : Foreign Key
|
||||||
|
"audit_template" <.. "audit" : Foreign Key
|
||||||
|
"action_plan" <.. "action" : Foreign Key
|
||||||
|
"action_plan" <.. "efficacy_indicator" : Foreign Key
|
||||||
|
"audit" <.. "action_plan" : Foreign Key
|
||||||
|
|
||||||
|
@enduml
|
@ -1,139 +1,600 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1146pt" height="548pt" viewBox="0 0 1146 548" version="1.1">
|
||||||
<svg width="58cm" height="28cm" viewBox="26 8 1147 549" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<defs>
|
||||||
<g>
|
<g>
|
||||||
<rect style="fill: #ffffff" x="570" y="99" width="148.6" height="28"/>
|
<symbol overflow="visible" id="glyph0-0">
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="570" y="99" width="148.6" height="28"/>
|
<path style="stroke:none;" d="M 0.796875 2.828125 L 0.796875 -11.28125 L 8.796875 -11.28125 L 8.796875 2.828125 Z M 1.703125 1.9375 L 7.90625 1.9375 L 7.90625 -10.390625 L 1.703125 -10.390625 Z M 1.703125 1.9375 "/>
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="644.3" y="118">Audit Template</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-1">
|
||||||
<g>
|
<path style="stroke:none;" d="M 8.546875 -2.125 L 3.84375 -2.125 L 3.109375 0 L 0.078125 0 L 4.40625 -11.671875 L 7.984375 -11.671875 L 12.3125 0 L 9.28125 0 Z M 4.59375 -4.296875 L 7.796875 -4.296875 L 6.203125 -8.9375 Z M 4.59375 -4.296875 "/>
|
||||||
<rect style="fill: #ffffff" x="212" y="140" width="177.5" height="28"/>
|
</symbol>
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="212" y="140" width="177.5" height="28"/>
|
<symbol overflow="visible" id="glyph0-2">
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="300.75" y="159">OpenStack Cluster</text>
|
<path style="stroke:none;" d="M 1.25 -3.40625 L 1.25 -8.75 L 4.0625 -8.75 L 4.0625 -7.875 C 4.0625 -7.40625 4.054688 -6.8125 4.046875 -6.09375 C 4.046875 -5.375 4.046875 -4.894531 4.046875 -4.65625 C 4.046875 -3.957031 4.0625 -3.453125 4.09375 -3.140625 C 4.132812 -2.828125 4.203125 -2.601562 4.296875 -2.46875 C 4.410156 -2.28125 4.554688 -2.132812 4.734375 -2.03125 C 4.921875 -1.9375 5.132812 -1.890625 5.375 -1.890625 C 5.957031 -1.890625 6.414062 -2.113281 6.75 -2.5625 C 7.082031 -3.007812 7.25 -3.632812 7.25 -4.4375 L 7.25 -8.75 L 10.046875 -8.75 L 10.046875 0 L 7.25 0 L 7.25 -1.265625 C 6.832031 -0.753906 6.382812 -0.375 5.90625 -0.125 C 5.4375 0.113281 4.921875 0.234375 4.359375 0.234375 C 3.347656 0.234375 2.578125 -0.078125 2.046875 -0.703125 C 1.515625 -1.328125 1.25 -2.226562 1.25 -3.40625 Z M 1.25 -3.40625 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph0-3">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="569.006,113 446,113 446,154 397.19,154 "/>
|
<path style="stroke:none;" d="M 7.296875 -7.46875 L 7.296875 -12.15625 L 10.109375 -12.15625 L 10.109375 0 L 7.296875 0 L 7.296875 -1.265625 C 6.910156 -0.753906 6.484375 -0.375 6.015625 -0.125 C 5.554688 0.113281 5.023438 0.234375 4.421875 0.234375 C 3.335938 0.234375 2.445312 -0.191406 1.75 -1.046875 C 1.0625 -1.910156 0.71875 -3.019531 0.71875 -4.375 C 0.71875 -5.71875 1.0625 -6.816406 1.75 -7.671875 C 2.445312 -8.535156 3.335938 -8.96875 4.421875 -8.96875 C 5.023438 -8.96875 5.554688 -8.84375 6.015625 -8.59375 C 6.484375 -8.351562 6.910156 -7.976562 7.296875 -7.46875 Z M 5.453125 -1.8125 C 6.054688 -1.8125 6.515625 -2.03125 6.828125 -2.46875 C 7.140625 -2.90625 7.296875 -3.539062 7.296875 -4.375 C 7.296875 -5.207031 7.140625 -5.84375 6.828125 -6.28125 C 6.515625 -6.71875 6.054688 -6.9375 5.453125 -6.9375 C 4.859375 -6.9375 4.40625 -6.71875 4.09375 -6.28125 C 3.78125 -5.84375 3.625 -5.207031 3.625 -4.375 C 3.625 -3.539062 3.78125 -2.90625 4.09375 -2.46875 C 4.40625 -2.03125 4.859375 -1.8125 5.453125 -1.8125 Z M 5.453125 -1.8125 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="409.838,149 393.838,154 409.838,159 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="448" y="130.5">Applies to</text>
|
<symbol overflow="visible" id="glyph0-4">
|
||||||
</g>
|
<path style="stroke:none;" d="M 1.34375 -8.75 L 4.140625 -8.75 L 4.140625 0 L 1.34375 0 Z M 1.34375 -12.15625 L 4.140625 -12.15625 L 4.140625 -9.875 L 1.34375 -9.875 Z M 1.34375 -12.15625 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<rect style="fill: #ffffff" x="615" y="227" width="58.4" height="28"/>
|
<symbol overflow="visible" id="glyph0-5">
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="615" y="227" width="58.4" height="28"/>
|
<path style="stroke:none;" d="M 4.40625 -11.234375 L 4.40625 -8.75 L 7.28125 -8.75 L 7.28125 -6.75 L 4.40625 -6.75 L 4.40625 -3.046875 C 4.40625 -2.640625 4.484375 -2.363281 4.640625 -2.21875 C 4.804688 -2.070312 5.128906 -2 5.609375 -2 L 7.046875 -2 L 7.046875 0 L 4.640625 0 C 3.535156 0 2.753906 -0.226562 2.296875 -0.6875 C 1.835938 -1.15625 1.609375 -1.941406 1.609375 -3.046875 L 1.609375 -6.75 L 0.21875 -6.75 L 0.21875 -8.75 L 1.609375 -8.75 L 1.609375 -11.234375 Z M 4.40625 -11.234375 "/>
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="644.2" y="246">Audit</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-6">
|
||||||
<g>
|
<path style="stroke:none;" d=""/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="644.2,225.996 644.2,188.497 644.3,188.497 644.3,133.705 "/>
|
</symbol>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="649.3,146.353 644.3,130.353 639.3,146.353 "/>
|
<symbol overflow="visible" id="glyph0-7">
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="644.25" y="185.497">gets configuration from</text>
|
<path style="stroke:none;" d="M 0.078125 -11.671875 L 10.828125 -11.671875 L 10.828125 -9.390625 L 6.96875 -9.390625 L 6.96875 0 L 3.953125 0 L 3.953125 -9.390625 L 0.078125 -9.390625 Z M 0.078125 -11.671875 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph0-8">
|
||||||
<rect style="fill: #ffffff" x="916" y="9" width="50.45" height="28"/>
|
<path style="stroke:none;" d="M 10.078125 -4.40625 L 10.078125 -3.609375 L 3.546875 -3.609375 C 3.609375 -2.953125 3.84375 -2.457031 4.25 -2.125 C 4.65625 -1.800781 5.222656 -1.640625 5.953125 -1.640625 C 6.546875 -1.640625 7.148438 -1.722656 7.765625 -1.890625 C 8.378906 -2.066406 9.015625 -2.332031 9.671875 -2.6875 L 9.671875 -0.53125 C 9.003906 -0.28125 8.335938 -0.09375 7.671875 0.03125 C 7.015625 0.164062 6.359375 0.234375 5.703125 0.234375 C 4.117188 0.234375 2.882812 -0.164062 2 -0.96875 C 1.125 -1.78125 0.6875 -2.914062 0.6875 -4.375 C 0.6875 -5.800781 1.117188 -6.921875 1.984375 -7.734375 C 2.847656 -8.554688 4.035156 -8.96875 5.546875 -8.96875 C 6.921875 -8.96875 8.019531 -8.550781 8.84375 -7.71875 C 9.664062 -6.894531 10.078125 -5.789062 10.078125 -4.40625 Z M 7.203125 -5.328125 C 7.203125 -5.859375 7.046875 -6.285156 6.734375 -6.609375 C 6.429688 -6.941406 6.03125 -7.109375 5.53125 -7.109375 C 4.988281 -7.109375 4.546875 -6.953125 4.203125 -6.640625 C 3.867188 -6.335938 3.660156 -5.898438 3.578125 -5.328125 Z M 7.203125 -5.328125 "/>
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="916" y="9" width="50.45" height="28"/>
|
</symbol>
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="941.225" y="28">Goal</text>
|
<symbol overflow="visible" id="glyph0-9">
|
||||||
</g>
|
<path style="stroke:none;" d="M 9.453125 -7.296875 C 9.804688 -7.835938 10.226562 -8.25 10.71875 -8.53125 C 11.207031 -8.820312 11.742188 -8.96875 12.328125 -8.96875 C 13.328125 -8.96875 14.085938 -8.65625 14.609375 -8.03125 C 15.140625 -7.414062 15.40625 -6.515625 15.40625 -5.328125 L 15.40625 0 L 12.59375 0 L 12.59375 -4.5625 C 12.601562 -4.632812 12.609375 -4.707031 12.609375 -4.78125 C 12.609375 -4.851562 12.609375 -4.957031 12.609375 -5.09375 C 12.609375 -5.707031 12.515625 -6.15625 12.328125 -6.4375 C 12.148438 -6.71875 11.859375 -6.859375 11.453125 -6.859375 C 10.921875 -6.859375 10.507812 -6.640625 10.21875 -6.203125 C 9.9375 -5.765625 9.789062 -5.128906 9.78125 -4.296875 L 9.78125 0 L 6.96875 0 L 6.96875 -4.5625 C 6.96875 -5.53125 6.882812 -6.15625 6.71875 -6.4375 C 6.550781 -6.71875 6.253906 -6.859375 5.828125 -6.859375 C 5.285156 -6.859375 4.867188 -6.632812 4.578125 -6.1875 C 4.285156 -5.75 4.140625 -5.125 4.140625 -4.3125 L 4.140625 0 L 1.328125 0 L 1.328125 -8.75 L 4.140625 -8.75 L 4.140625 -7.46875 C 4.484375 -7.96875 4.878906 -8.34375 5.328125 -8.59375 C 5.773438 -8.84375 6.265625 -8.96875 6.796875 -8.96875 C 7.398438 -8.96875 7.929688 -8.820312 8.390625 -8.53125 C 8.859375 -8.238281 9.210938 -7.828125 9.453125 -7.296875 Z M 9.453125 -7.296875 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="644.3,97.9927 644.3,72 941.225,72 941.225,44.7125 "/>
|
<symbol overflow="visible" id="glyph0-10">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="946.225,57.3599 941.225,41.3599 936.225,57.3599 "/>
|
<path style="stroke:none;" d="M 4.140625 -1.265625 L 4.140625 3.328125 L 1.34375 3.328125 L 1.34375 -8.75 L 4.140625 -8.75 L 4.140625 -7.46875 C 4.523438 -7.976562 4.953125 -8.351562 5.421875 -8.59375 C 5.890625 -8.84375 6.429688 -8.96875 7.046875 -8.96875 C 8.117188 -8.96875 9 -8.535156 9.6875 -7.671875 C 10.382812 -6.816406 10.734375 -5.71875 10.734375 -4.375 C 10.734375 -3.019531 10.382812 -1.910156 9.6875 -1.046875 C 9 -0.191406 8.117188 0.234375 7.046875 0.234375 C 6.429688 0.234375 5.890625 0.113281 5.421875 -0.125 C 4.953125 -0.375 4.523438 -0.753906 4.140625 -1.265625 Z M 6 -6.9375 C 5.40625 -6.9375 4.945312 -6.710938 4.625 -6.265625 C 4.300781 -5.828125 4.140625 -5.195312 4.140625 -4.375 C 4.140625 -3.539062 4.300781 -2.90625 4.625 -2.46875 C 4.945312 -2.03125 5.40625 -1.8125 6 -1.8125 C 6.601562 -1.8125 7.0625 -2.03125 7.375 -2.46875 C 7.6875 -2.90625 7.84375 -3.539062 7.84375 -4.375 C 7.84375 -5.207031 7.6875 -5.84375 7.375 -6.28125 C 7.0625 -6.71875 6.601562 -6.9375 6 -6.9375 Z M 6 -6.9375 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="792.763" y="69">Achieves</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-11">
|
||||||
<g>
|
<path style="stroke:none;" d="M 1.34375 -12.15625 L 4.140625 -12.15625 L 4.140625 0 L 1.34375 0 Z M 1.34375 -12.15625 "/>
|
||||||
<rect style="fill: #ffffff" x="495" y="367" width="112.45" height="28"/>
|
</symbol>
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="495" y="367" width="112.45" height="28"/>
|
<symbol overflow="visible" id="glyph0-12">
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="551.225" y="386">Action Plan</text>
|
<path style="stroke:none;" d="M 5.265625 -3.9375 C 4.679688 -3.9375 4.242188 -3.835938 3.953125 -3.640625 C 3.660156 -3.441406 3.515625 -3.148438 3.515625 -2.765625 C 3.515625 -2.410156 3.628906 -2.132812 3.859375 -1.9375 C 4.097656 -1.738281 4.429688 -1.640625 4.859375 -1.640625 C 5.378906 -1.640625 5.816406 -1.828125 6.171875 -2.203125 C 6.535156 -2.578125 6.71875 -3.050781 6.71875 -3.625 L 6.71875 -3.9375 Z M 9.546875 -5 L 9.546875 0 L 6.71875 0 L 6.71875 -1.296875 C 6.34375 -0.765625 5.921875 -0.375 5.453125 -0.125 C 4.984375 0.113281 4.414062 0.234375 3.75 0.234375 C 2.84375 0.234375 2.101562 -0.03125 1.53125 -0.5625 C 0.96875 -1.09375 0.6875 -1.78125 0.6875 -2.625 C 0.6875 -3.65625 1.039062 -4.410156 1.75 -4.890625 C 2.457031 -5.367188 3.566406 -5.609375 5.078125 -5.609375 L 6.71875 -5.609375 L 6.71875 -5.828125 C 6.71875 -6.265625 6.539062 -6.585938 6.1875 -6.796875 C 5.84375 -7.003906 5.300781 -7.109375 4.5625 -7.109375 C 3.96875 -7.109375 3.410156 -7.046875 2.890625 -6.921875 C 2.378906 -6.804688 1.898438 -6.628906 1.453125 -6.390625 L 1.453125 -8.515625 C 2.054688 -8.660156 2.660156 -8.769531 3.265625 -8.84375 C 3.867188 -8.925781 4.472656 -8.96875 5.078125 -8.96875 C 6.648438 -8.96875 7.785156 -8.65625 8.484375 -8.03125 C 9.191406 -7.40625 9.546875 -6.394531 9.546875 -5 Z M 9.546875 -5 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph0-13">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="644.2,256 644.2,298.5 523,298.5 523,356.295 "/>
|
<path style="stroke:none;" d="M 6.796875 -9.703125 C 5.878906 -9.703125 5.164062 -9.363281 4.65625 -8.6875 C 4.15625 -8.007812 3.90625 -7.054688 3.90625 -5.828125 C 3.90625 -4.597656 4.15625 -3.644531 4.65625 -2.96875 C 5.164062 -2.289062 5.878906 -1.953125 6.796875 -1.953125 C 7.722656 -1.953125 8.4375 -2.289062 8.9375 -2.96875 C 9.445312 -3.644531 9.703125 -4.597656 9.703125 -5.828125 C 9.703125 -7.054688 9.445312 -8.007812 8.9375 -8.6875 C 8.4375 -9.363281 7.722656 -9.703125 6.796875 -9.703125 Z M 6.796875 -11.875 C 8.671875 -11.875 10.140625 -11.335938 11.203125 -10.265625 C 12.265625 -9.191406 12.796875 -7.710938 12.796875 -5.828125 C 12.796875 -3.941406 12.265625 -2.457031 11.203125 -1.375 C 10.140625 -0.300781 8.671875 0.234375 6.796875 0.234375 C 4.929688 0.234375 3.460938 -0.300781 2.390625 -1.375 C 1.328125 -2.457031 0.796875 -3.941406 0.796875 -5.828125 C 0.796875 -7.710938 1.328125 -9.191406 2.390625 -10.265625 C 3.460938 -11.335938 4.929688 -11.875 6.796875 -11.875 Z M 6.796875 -11.875 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="518,343.647 523,359.647 528,343.647 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="583.6" y="295.5">Generates</text>
|
<symbol overflow="visible" id="glyph0-14">
|
||||||
</g>
|
<path style="stroke:none;" d="M 10.140625 -5.328125 L 10.140625 0 L 7.328125 0 L 7.328125 -4.078125 C 7.328125 -4.835938 7.3125 -5.359375 7.28125 -5.640625 C 7.25 -5.929688 7.191406 -6.144531 7.109375 -6.28125 C 6.992188 -6.457031 6.84375 -6.597656 6.65625 -6.703125 C 6.46875 -6.804688 6.253906 -6.859375 6.015625 -6.859375 C 5.429688 -6.859375 4.972656 -6.628906 4.640625 -6.171875 C 4.304688 -5.722656 4.140625 -5.101562 4.140625 -4.3125 L 4.140625 0 L 1.34375 0 L 1.34375 -8.75 L 4.140625 -8.75 L 4.140625 -7.46875 C 4.566406 -7.976562 5.015625 -8.351562 5.484375 -8.59375 C 5.960938 -8.84375 6.488281 -8.96875 7.0625 -8.96875 C 8.070312 -8.96875 8.835938 -8.65625 9.359375 -8.03125 C 9.878906 -7.414062 10.140625 -6.515625 10.140625 -5.328125 Z M 10.140625 -5.328125 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<rect style="fill: #ffffff" x="682" y="471" width="67.45" height="28"/>
|
<symbol overflow="visible" id="glyph0-15">
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="682" y="471" width="67.45" height="28"/>
|
<path style="stroke:none;" d="M 9.59375 -11.296875 L 9.59375 -8.828125 C 8.945312 -9.117188 8.316406 -9.335938 7.703125 -9.484375 C 7.097656 -9.628906 6.523438 -9.703125 5.984375 -9.703125 C 5.265625 -9.703125 4.734375 -9.601562 4.390625 -9.40625 C 4.046875 -9.207031 3.875 -8.898438 3.875 -8.484375 C 3.875 -8.171875 3.988281 -7.925781 4.21875 -7.75 C 4.457031 -7.570312 4.878906 -7.421875 5.484375 -7.296875 L 6.765625 -7.046875 C 8.066406 -6.785156 8.988281 -6.390625 9.53125 -5.859375 C 10.082031 -5.328125 10.359375 -4.570312 10.359375 -3.59375 C 10.359375 -2.300781 9.972656 -1.335938 9.203125 -0.703125 C 8.441406 -0.078125 7.28125 0.234375 5.71875 0.234375 C 4.976562 0.234375 4.234375 0.160156 3.484375 0.015625 C 2.742188 -0.128906 2 -0.335938 1.25 -0.609375 L 1.25 -3.15625 C 2 -2.757812 2.71875 -2.457031 3.40625 -2.25 C 4.101562 -2.050781 4.773438 -1.953125 5.421875 -1.953125 C 6.078125 -1.953125 6.578125 -2.0625 6.921875 -2.28125 C 7.273438 -2.5 7.453125 -2.8125 7.453125 -3.21875 C 7.453125 -3.582031 7.332031 -3.863281 7.09375 -4.0625 C 6.863281 -4.257812 6.394531 -4.4375 5.6875 -4.59375 L 4.515625 -4.859375 C 3.347656 -5.109375 2.492188 -5.503906 1.953125 -6.046875 C 1.421875 -6.597656 1.15625 -7.335938 1.15625 -8.265625 C 1.15625 -9.421875 1.53125 -10.3125 2.28125 -10.9375 C 3.03125 -11.5625 4.109375 -11.875 5.515625 -11.875 C 6.148438 -11.875 6.804688 -11.828125 7.484375 -11.734375 C 8.160156 -11.640625 8.863281 -11.492188 9.59375 -11.296875 Z M 9.59375 -11.296875 "/>
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="715.725" y="490">Action</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-16">
|
||||||
<g>
|
<path style="stroke:none;" d="M 8.421875 -8.484375 L 8.421875 -6.203125 C 8.035156 -6.460938 7.648438 -6.65625 7.265625 -6.78125 C 6.890625 -6.90625 6.492188 -6.96875 6.078125 -6.96875 C 5.296875 -6.96875 4.6875 -6.738281 4.25 -6.28125 C 3.820312 -5.820312 3.609375 -5.1875 3.609375 -4.375 C 3.609375 -3.550781 3.820312 -2.910156 4.25 -2.453125 C 4.6875 -2.003906 5.296875 -1.78125 6.078125 -1.78125 C 6.515625 -1.78125 6.929688 -1.84375 7.328125 -1.96875 C 7.722656 -2.101562 8.085938 -2.296875 8.421875 -2.546875 L 8.421875 -0.265625 C 7.984375 -0.0976562 7.535156 0.0234375 7.078125 0.109375 C 6.628906 0.191406 6.179688 0.234375 5.734375 0.234375 C 4.148438 0.234375 2.910156 -0.171875 2.015625 -0.984375 C 1.128906 -1.796875 0.6875 -2.925781 0.6875 -4.375 C 0.6875 -5.8125 1.128906 -6.9375 2.015625 -7.75 C 2.910156 -8.5625 4.148438 -8.96875 5.734375 -8.96875 C 6.191406 -8.96875 6.640625 -8.925781 7.078125 -8.84375 C 7.523438 -8.757812 7.972656 -8.640625 8.421875 -8.484375 Z M 8.421875 -8.484375 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="551.225,420.945 551.225,443 715.725,443 715.725,470.029 "/>
|
</symbol>
|
||||||
<polygon style="fill: #000000" points="551.225,395.773 556.025,409.773 551.225,423.773 546.425,409.773 "/>
|
<symbol overflow="visible" id="glyph0-17">
|
||||||
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="551.225,395.773 556.025,409.773 551.225,423.773 546.425,409.773 "/>
|
<path style="stroke:none;" d="M 1.34375 -12.15625 L 4.140625 -12.15625 L 4.140625 -5.546875 L 7.359375 -8.75 L 10.609375 -8.75 L 6.34375 -4.734375 L 10.953125 0 L 7.5625 0 L 4.140625 -3.65625 L 4.140625 0 L 1.34375 0 Z M 1.34375 -12.15625 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="633.475" y="440">is composed of</text>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="562.225" y="407.773"></text>
|
<symbol overflow="visible" id="glyph0-18">
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="719.725" y="466.029"></text>
|
<path style="stroke:none;" d="M 10.71875 -0.640625 C 10.164062 -0.359375 9.585938 -0.144531 8.984375 0 C 8.390625 0.15625 7.769531 0.234375 7.125 0.234375 C 5.175781 0.234375 3.632812 -0.304688 2.5 -1.390625 C 1.363281 -2.484375 0.796875 -3.960938 0.796875 -5.828125 C 0.796875 -7.691406 1.363281 -9.164062 2.5 -10.25 C 3.632812 -11.332031 5.175781 -11.875 7.125 -11.875 C 7.769531 -11.875 8.390625 -11.800781 8.984375 -11.65625 C 9.585938 -11.507812 10.164062 -11.296875 10.71875 -11.015625 L 10.71875 -8.59375 C 10.164062 -8.976562 9.617188 -9.257812 9.078125 -9.4375 C 8.535156 -9.613281 7.960938 -9.703125 7.359375 -9.703125 C 6.285156 -9.703125 5.441406 -9.359375 4.828125 -8.671875 C 4.210938 -7.984375 3.90625 -7.035156 3.90625 -5.828125 C 3.90625 -4.617188 4.210938 -3.671875 4.828125 -2.984375 C 5.441406 -2.296875 6.285156 -1.953125 7.359375 -1.953125 C 7.960938 -1.953125 8.535156 -2.039062 9.078125 -2.21875 C 9.617188 -2.394531 10.164062 -2.675781 10.71875 -3.0625 Z M 10.71875 -0.640625 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph0-19">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="749.45,499 749.45,517 862,517 862,485 749.45,485 "/>
|
<path style="stroke:none;" d="M 8.1875 -8.484375 L 8.1875 -6.359375 C 7.582031 -6.609375 7 -6.796875 6.4375 -6.921875 C 5.882812 -7.046875 5.363281 -7.109375 4.875 -7.109375 C 4.34375 -7.109375 3.945312 -7.039062 3.6875 -6.90625 C 3.425781 -6.769531 3.296875 -6.566406 3.296875 -6.296875 C 3.296875 -6.066406 3.394531 -5.890625 3.59375 -5.765625 C 3.789062 -5.648438 4.140625 -5.566406 4.640625 -5.515625 L 5.140625 -5.4375 C 6.566406 -5.257812 7.523438 -4.960938 8.015625 -4.546875 C 8.515625 -4.128906 8.765625 -3.472656 8.765625 -2.578125 C 8.765625 -1.648438 8.421875 -0.945312 7.734375 -0.46875 C 7.046875 0 6.019531 0.234375 4.65625 0.234375 C 4.082031 0.234375 3.484375 0.1875 2.859375 0.09375 C 2.242188 0 1.613281 -0.140625 0.96875 -0.328125 L 0.96875 -2.453125 C 1.519531 -2.179688 2.085938 -1.976562 2.671875 -1.84375 C 3.265625 -1.707031 3.863281 -1.640625 4.46875 -1.640625 C 5.007812 -1.640625 5.414062 -1.710938 5.6875 -1.859375 C 5.96875 -2.015625 6.109375 -2.238281 6.109375 -2.53125 C 6.109375 -2.78125 6.015625 -2.96875 5.828125 -3.09375 C 5.640625 -3.21875 5.257812 -3.3125 4.6875 -3.375 L 4.203125 -3.4375 C 2.953125 -3.59375 2.078125 -3.878906 1.578125 -4.296875 C 1.078125 -4.722656 0.828125 -5.367188 0.828125 -6.234375 C 0.828125 -7.160156 1.144531 -7.847656 1.78125 -8.296875 C 2.414062 -8.742188 3.390625 -8.96875 4.703125 -8.96875 C 5.222656 -8.96875 5.765625 -8.925781 6.328125 -8.84375 C 6.898438 -8.769531 7.519531 -8.648438 8.1875 -8.484375 Z M 8.1875 -8.484375 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="805.725" y="514">Next action</text>
|
</symbol>
|
||||||
<polygon style="fill: #000000" points="850.075,514 850.075,506 858.075,510 "/>
|
<symbol overflow="visible" id="glyph0-20">
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="753.45" y="511"></text>
|
<path style="stroke:none;" d="M 7.84375 -6.375 C 7.601562 -6.488281 7.359375 -6.570312 7.109375 -6.625 C 6.867188 -6.675781 6.628906 -6.703125 6.390625 -6.703125 C 5.671875 -6.703125 5.113281 -6.472656 4.71875 -6.015625 C 4.332031 -5.554688 4.140625 -4.894531 4.140625 -4.03125 L 4.140625 0 L 1.34375 0 L 1.34375 -8.75 L 4.140625 -8.75 L 4.140625 -7.3125 C 4.503906 -7.882812 4.914062 -8.300781 5.375 -8.5625 C 5.84375 -8.832031 6.40625 -8.96875 7.0625 -8.96875 C 7.15625 -8.96875 7.253906 -8.960938 7.359375 -8.953125 C 7.472656 -8.941406 7.632812 -8.925781 7.84375 -8.90625 Z M 7.84375 -6.375 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="753.45" y="482"></text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-21">
|
||||||
<g>
|
<path style="stroke:none;" d="M 11.953125 -0.875 C 11.203125 -0.507812 10.421875 -0.234375 9.609375 -0.046875 C 8.804688 0.140625 7.976562 0.234375 7.125 0.234375 C 5.175781 0.234375 3.632812 -0.304688 2.5 -1.390625 C 1.363281 -2.484375 0.796875 -3.960938 0.796875 -5.828125 C 0.796875 -7.703125 1.375 -9.175781 2.53125 -10.25 C 3.6875 -11.332031 5.269531 -11.875 7.28125 -11.875 C 8.0625 -11.875 8.804688 -11.800781 9.515625 -11.65625 C 10.222656 -11.507812 10.894531 -11.296875 11.53125 -11.015625 L 11.53125 -8.59375 C 10.875 -8.96875 10.222656 -9.242188 9.578125 -9.421875 C 8.941406 -9.609375 8.300781 -9.703125 7.65625 -9.703125 C 6.457031 -9.703125 5.53125 -9.363281 4.875 -8.6875 C 4.226562 -8.019531 3.90625 -7.066406 3.90625 -5.828125 C 3.90625 -4.585938 4.21875 -3.628906 4.84375 -2.953125 C 5.46875 -2.285156 6.359375 -1.953125 7.515625 -1.953125 C 7.828125 -1.953125 8.113281 -1.972656 8.375 -2.015625 C 8.644531 -2.054688 8.890625 -2.117188 9.109375 -2.203125 L 9.109375 -4.46875 L 7.265625 -4.46875 L 7.265625 -6.484375 L 11.953125 -6.484375 Z M 11.953125 -0.875 "/>
|
||||||
<ellipse style="fill: #ffffff" cx="1036" cy="219" rx="6" ry="6"/>
|
</symbol>
|
||||||
<ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" cx="1036" cy="219" rx="6" ry="6"/>
|
<symbol overflow="visible" id="glyph0-22">
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="1012" y1="231" x2="1060" y2="231"/>
|
<path style="stroke:none;" d="M 5.515625 -6.96875 C 4.890625 -6.96875 4.414062 -6.742188 4.09375 -6.296875 C 3.769531 -5.847656 3.609375 -5.207031 3.609375 -4.375 C 3.609375 -3.53125 3.769531 -2.882812 4.09375 -2.4375 C 4.414062 -2 4.890625 -1.78125 5.515625 -1.78125 C 6.117188 -1.78125 6.582031 -2 6.90625 -2.4375 C 7.226562 -2.882812 7.390625 -3.53125 7.390625 -4.375 C 7.390625 -5.207031 7.226562 -5.847656 6.90625 -6.296875 C 6.582031 -6.742188 6.117188 -6.96875 5.515625 -6.96875 Z M 5.515625 -8.96875 C 7.015625 -8.96875 8.1875 -8.5625 9.03125 -7.75 C 9.882812 -6.9375 10.3125 -5.8125 10.3125 -4.375 C 10.3125 -2.9375 9.882812 -1.804688 9.03125 -0.984375 C 8.1875 -0.171875 7.015625 0.234375 5.515625 0.234375 C 4.003906 0.234375 2.820312 -0.171875 1.96875 -0.984375 C 1.113281 -1.804688 0.6875 -2.9375 0.6875 -4.375 C 0.6875 -5.8125 1.113281 -6.9375 1.96875 -7.75 C 2.820312 -8.5625 4.003906 -8.96875 5.515625 -8.96875 Z M 5.515625 -8.96875 "/>
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="1036" y1="225" x2="1036" y2="255"/>
|
</symbol>
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="1036" y1="255" x2="1012" y2="281"/>
|
<symbol overflow="visible" id="glyph0-23">
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="1036" y1="255" x2="1060" y2="281"/>
|
<path style="stroke:none;" d="M 1.46875 -11.671875 L 6.46875 -11.671875 C 7.945312 -11.671875 9.082031 -11.335938 9.875 -10.671875 C 10.675781 -10.015625 11.078125 -9.078125 11.078125 -7.859375 C 11.078125 -6.640625 10.675781 -5.695312 9.875 -5.03125 C 9.082031 -4.375 7.945312 -4.046875 6.46875 -4.046875 L 4.484375 -4.046875 L 4.484375 0 L 1.46875 0 Z M 4.484375 -9.484375 L 4.484375 -6.234375 L 6.140625 -6.234375 C 6.722656 -6.234375 7.171875 -6.375 7.484375 -6.65625 C 7.804688 -6.9375 7.96875 -7.335938 7.96875 -7.859375 C 7.96875 -8.378906 7.804688 -8.78125 7.484375 -9.0625 C 7.171875 -9.34375 6.722656 -9.484375 6.140625 -9.484375 Z M 4.484375 -9.484375 "/>
|
||||||
<text font-size="12.8" style="fill: #ff0000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="1036" y="304.9">
|
</symbol>
|
||||||
<tspan x="1036" y="304.9">Administrator</tspan>
|
<symbol overflow="visible" id="glyph0-24">
|
||||||
</text>
|
<path style="stroke:none;" d="M 5.75 -6.5 C 6.375 -6.5 6.820312 -6.613281 7.09375 -6.84375 C 7.375 -7.082031 7.515625 -7.46875 7.515625 -8 C 7.515625 -8.53125 7.375 -8.910156 7.09375 -9.140625 C 6.820312 -9.367188 6.375 -9.484375 5.75 -9.484375 L 4.484375 -9.484375 L 4.484375 -6.5 Z M 4.484375 -4.421875 L 4.484375 0 L 1.46875 0 L 1.46875 -11.671875 L 6.0625 -11.671875 C 7.601562 -11.671875 8.726562 -11.410156 9.4375 -10.890625 C 10.15625 -10.378906 10.515625 -9.566406 10.515625 -8.453125 C 10.515625 -7.679688 10.328125 -7.046875 9.953125 -6.546875 C 9.585938 -6.054688 9.03125 -5.691406 8.28125 -5.453125 C 8.6875 -5.359375 9.050781 -5.144531 9.375 -4.8125 C 9.707031 -4.488281 10.039062 -3.988281 10.375 -3.3125 L 12 0 L 8.796875 0 L 7.375 -2.90625 C 7.09375 -3.488281 6.800781 -3.882812 6.5 -4.09375 C 6.207031 -4.3125 5.816406 -4.421875 5.328125 -4.421875 Z M 4.484375 -4.421875 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph0-25">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="985.869,255 834.138,255 834.138,241 681.113,241 "/>
|
<path style="stroke:none;" d="M 7.296875 -1.484375 C 6.910156 -0.972656 6.484375 -0.597656 6.015625 -0.359375 C 5.554688 -0.117188 5.023438 0 4.421875 0 C 3.347656 0 2.460938 -0.421875 1.765625 -1.265625 C 1.066406 -2.109375 0.71875 -3.179688 0.71875 -4.484375 C 0.71875 -5.785156 1.066406 -6.851562 1.765625 -7.6875 C 2.460938 -8.53125 3.347656 -8.953125 4.421875 -8.953125 C 5.023438 -8.953125 5.554688 -8.832031 6.015625 -8.59375 C 6.484375 -8.351562 6.910156 -7.972656 7.296875 -7.453125 L 7.296875 -8.75 L 10.109375 -8.75 L 10.109375 -0.890625 C 10.109375 0.523438 9.664062 1.601562 8.78125 2.34375 C 7.894531 3.082031 6.609375 3.453125 4.921875 3.453125 C 4.367188 3.453125 3.835938 3.410156 3.328125 3.328125 C 2.816406 3.242188 2.304688 3.117188 1.796875 2.953125 L 1.796875 0.765625 C 2.285156 1.046875 2.765625 1.253906 3.234375 1.390625 C 3.703125 1.535156 4.171875 1.609375 4.640625 1.609375 C 5.554688 1.609375 6.226562 1.40625 6.65625 1 C 7.082031 0.601562 7.296875 -0.0234375 7.296875 -0.890625 Z M 5.453125 -6.9375 C 4.878906 -6.9375 4.429688 -6.722656 4.109375 -6.296875 C 3.785156 -5.867188 3.625 -5.265625 3.625 -4.484375 C 3.625 -3.679688 3.78125 -3.070312 4.09375 -2.65625 C 4.40625 -2.238281 4.859375 -2.03125 5.453125 -2.03125 C 6.035156 -2.03125 6.488281 -2.242188 6.8125 -2.671875 C 7.132812 -3.097656 7.296875 -3.703125 7.296875 -4.484375 C 7.296875 -5.265625 7.132812 -5.867188 6.8125 -6.296875 C 6.488281 -6.722656 6.035156 -6.9375 5.453125 -6.9375 Z M 5.453125 -6.9375 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="693.76,236 677.76,241 693.76,246 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="836.138" y="245">Triggers</text>
|
<symbol overflow="visible" id="glyph0-26">
|
||||||
</g>
|
<path style="stroke:none;" d="M 0.203125 -8.75 L 3 -8.75 L 5.34375 -2.8125 L 7.34375 -8.75 L 10.140625 -8.75 L 6.46875 0.828125 C 6.09375 1.804688 5.660156 2.488281 5.171875 2.875 C 4.679688 3.257812 4.03125 3.453125 3.21875 3.453125 L 1.609375 3.453125 L 1.609375 1.625 L 2.484375 1.625 C 2.953125 1.625 3.296875 1.546875 3.515625 1.390625 C 3.734375 1.242188 3.898438 0.972656 4.015625 0.578125 L 4.09375 0.34375 Z M 0.203125 -8.75 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="1038,192.993 882.3,192.993 882.3,113 725.305,113 "/>
|
<symbol overflow="visible" id="glyph0-27">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="737.953,108 721.953,113 737.953,118 "/>
|
<path style="stroke:none;" d="M 1.46875 -11.671875 L 9.59375 -11.671875 L 9.59375 -9.390625 L 4.484375 -9.390625 L 4.484375 -7.21875 L 9.28125 -7.21875 L 9.28125 -4.953125 L 4.484375 -4.953125 L 4.484375 -2.28125 L 9.765625 -2.28125 L 9.765625 0 L 1.46875 0 Z M 1.46875 -11.671875 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="884.3" y="149.997">Defines Audit configuration in</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph0-28">
|
||||||
<g>
|
<path style="stroke:none;" d="M 7.109375 -12.15625 L 7.109375 -10.328125 L 5.5625 -10.328125 C 5.164062 -10.328125 4.890625 -10.253906 4.734375 -10.109375 C 4.578125 -9.960938 4.5 -9.710938 4.5 -9.359375 L 4.5 -8.75 L 7.703125 -8.75 L 7.703125 -9.359375 C 7.703125 -10.316406 7.96875 -11.019531 8.5 -11.46875 C 9.03125 -11.925781 9.851562 -12.15625 10.96875 -12.15625 L 13.109375 -12.15625 L 13.109375 -10.328125 L 11.5625 -10.328125 C 11.164062 -10.328125 10.894531 -10.253906 10.75 -10.109375 C 10.59375 -9.960938 10.515625 -9.710938 10.515625 -9.359375 L 10.515625 -8.75 L 16.5 -8.75 L 16.5 0 L 13.6875 0 L 13.6875 -6.75 L 10.515625 -6.75 L 10.515625 0 L 7.703125 0 L 7.703125 -6.75 L 4.5 -6.75 L 4.5 0 L 1.703125 0 L 1.703125 -6.75 L 0.3125 -6.75 L 0.3125 -8.75 L 1.703125 -8.75 L 1.703125 -9.359375 C 1.703125 -10.316406 1.96875 -11.019531 2.5 -11.46875 C 3.03125 -11.925781 3.851562 -12.15625 4.96875 -12.15625 Z M 13.6875 -12.15625 L 16.5 -12.15625 L 16.5 -9.875 L 13.6875 -9.875 Z M 13.6875 -12.15625 "/>
|
||||||
<ellipse style="fill: #ffffff" cx="103" cy="28" rx="6" ry="6"/>
|
</symbol>
|
||||||
<ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" cx="103" cy="28" rx="6" ry="6"/>
|
<symbol overflow="visible" id="glyph0-29">
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="79" y1="40" x2="127" y2="40"/>
|
<path style="stroke:none;" d="M 1.46875 -11.671875 L 4.484375 -11.671875 L 4.484375 0 L 1.46875 0 Z M 1.46875 -11.671875 "/>
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="103" y1="34" x2="103" y2="64"/>
|
</symbol>
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="103" y1="64" x2="79" y2="90"/>
|
<symbol overflow="visible" id="glyph1-0">
|
||||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ff0000" x1="103" y1="64" x2="127" y2="90"/>
|
<path style="stroke:none;" d="M 0.65625 2.296875 L 0.65625 -9.171875 L 7.15625 -9.171875 L 7.15625 2.296875 Z M 1.390625 1.578125 L 6.4375 1.578125 L 6.4375 -8.4375 L 1.390625 -8.4375 Z M 1.390625 1.578125 "/>
|
||||||
<text font-size="12.8" style="fill: #ff0000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="103" y="113.9">
|
</symbol>
|
||||||
<tspan x="103" y="113.9">Customer</tspan>
|
<symbol overflow="visible" id="glyph1-1">
|
||||||
</text>
|
<path style="stroke:none;" d="M 3.90625 -8.34375 L 2.5625 -3.5 L 5.265625 -3.5 Z M 3.140625 -9.484375 L 4.6875 -9.484375 L 7.59375 0 L 6.265625 0 L 5.5625 -2.46875 L 2.25 -2.46875 L 1.5625 0 L 0.234375 0 Z M 3.140625 -9.484375 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph1-2">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="137.683,64 300.75,64 300.75,133.295 "/>
|
<path style="stroke:none;" d="M 2.375 -0.890625 L 2.375 2.703125 L 1.203125 2.703125 L 1.203125 -7.109375 L 2.375 -7.109375 L 2.375 -6.203125 C 2.570312 -6.554688 2.832031 -6.820312 3.15625 -7 C 3.476562 -7.1875 3.851562 -7.28125 4.28125 -7.28125 C 5.132812 -7.28125 5.804688 -6.945312 6.296875 -6.28125 C 6.785156 -5.613281 7.03125 -4.691406 7.03125 -3.515625 C 7.03125 -2.367188 6.785156 -1.460938 6.296875 -0.796875 C 5.804688 -0.140625 5.132812 0.1875 4.28125 0.1875 C 3.84375 0.1875 3.460938 0.09375 3.140625 -0.09375 C 2.816406 -0.28125 2.5625 -0.546875 2.375 -0.890625 Z M 5.8125 -3.546875 C 5.8125 -4.453125 5.664062 -5.132812 5.375 -5.59375 C 5.09375 -6.0625 4.671875 -6.296875 4.109375 -6.296875 C 3.535156 -6.296875 3.101562 -6.0625 2.8125 -5.59375 C 2.519531 -5.132812 2.375 -4.453125 2.375 -3.546875 C 2.375 -2.648438 2.519531 -1.96875 2.8125 -1.5 C 3.101562 -1.039062 3.535156 -0.8125 4.109375 -0.8125 C 4.671875 -0.8125 5.09375 -1.039062 5.375 -1.5 C 5.664062 -1.957031 5.8125 -2.640625 5.8125 -3.546875 Z M 5.8125 -3.546875 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="295.75,120.647 300.75,136.647 305.75,120.647 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="219.217" y="61">Consumes resources</text>
|
<symbol overflow="visible" id="glyph1-3">
|
||||||
</g>
|
<path style="stroke:none;" d="M 4.0625 -2.578125 C 4.0625 -2.054688 4.15625 -1.660156 4.34375 -1.390625 C 4.539062 -1.117188 4.828125 -0.984375 5.203125 -0.984375 L 6.5625 -0.984375 L 6.5625 0 L 5.078125 0 C 4.378906 0 3.835938 -0.222656 3.453125 -0.671875 C 3.078125 -1.117188 2.890625 -1.753906 2.890625 -2.578125 L 2.890625 -9.03125 L 1.015625 -9.03125 L 1.015625 -9.953125 L 4.0625 -9.953125 Z M 4.0625 -2.578125 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<rect style="fill: #ffffff" x="27" y="258" width="102.8" height="28"/>
|
<symbol overflow="visible" id="glyph1-4">
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="27" y="258" width="102.8" height="28"/>
|
<path style="stroke:none;" d="M 1.625 -7.109375 L 4.609375 -7.109375 L 4.609375 -0.90625 L 6.9375 -0.90625 L 6.9375 0 L 1.125 0 L 1.125 -0.90625 L 3.453125 -0.90625 L 3.453125 -6.203125 L 1.625 -6.203125 Z M 3.453125 -9.875 L 4.609375 -9.875 L 4.609375 -8.390625 L 3.453125 -8.390625 Z M 3.453125 -9.875 "/>
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="78.4" y="277">Resources</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph1-5">
|
||||||
<g>
|
<path style="stroke:none;" d="M 7.0625 -3.84375 L 7.0625 -3.28125 L 2 -3.28125 L 2 -3.234375 C 2 -2.460938 2.203125 -1.863281 2.609375 -1.4375 C 3.015625 -1.019531 3.582031 -0.8125 4.3125 -0.8125 C 4.6875 -0.8125 5.078125 -0.867188 5.484375 -0.984375 C 5.890625 -1.097656 6.320312 -1.28125 6.78125 -1.53125 L 6.78125 -0.359375 C 6.34375 -0.179688 5.914062 -0.046875 5.5 0.046875 C 5.082031 0.140625 4.679688 0.1875 4.296875 0.1875 C 3.191406 0.1875 2.328125 -0.140625 1.703125 -0.796875 C 1.085938 -1.460938 0.78125 -2.378906 0.78125 -3.546875 C 0.78125 -4.679688 1.082031 -5.585938 1.6875 -6.265625 C 2.300781 -6.941406 3.113281 -7.28125 4.125 -7.28125 C 5.03125 -7.28125 5.742188 -6.972656 6.265625 -6.359375 C 6.796875 -5.742188 7.0625 -4.90625 7.0625 -3.84375 Z M 5.890625 -4.1875 C 5.867188 -4.875 5.703125 -5.394531 5.390625 -5.75 C 5.085938 -6.113281 4.648438 -6.296875 4.078125 -6.296875 C 3.515625 -6.296875 3.050781 -6.109375 2.6875 -5.734375 C 2.320312 -5.359375 2.109375 -4.84375 2.046875 -4.1875 Z M 5.890625 -4.1875 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="186.828,154 78.4,154 78.4,258 "/>
|
</symbol>
|
||||||
<polygon style="fill: #000000" points="212,154 198,158.8 184,154 198,149.2 "/>
|
<symbol overflow="visible" id="glyph1-6">
|
||||||
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="212,154 198,158.8 184,154 198,149.2 "/>
|
<path style="stroke:none;" d="M 6.171875 -6.859375 L 6.171875 -5.71875 C 5.835938 -5.914062 5.5 -6.0625 5.15625 -6.15625 C 4.820312 -6.25 4.476562 -6.296875 4.125 -6.296875 C 3.601562 -6.296875 3.210938 -6.210938 2.953125 -6.046875 C 2.691406 -5.878906 2.5625 -5.617188 2.5625 -5.265625 C 2.5625 -4.941406 2.65625 -4.703125 2.84375 -4.546875 C 3.039062 -4.390625 3.523438 -4.238281 4.296875 -4.09375 L 4.78125 -4 C 5.351562 -3.894531 5.785156 -3.675781 6.078125 -3.34375 C 6.378906 -3.007812 6.53125 -2.582031 6.53125 -2.0625 C 6.53125 -1.351562 6.28125 -0.800781 5.78125 -0.40625 C 5.289062 -0.0078125 4.597656 0.1875 3.703125 0.1875 C 3.359375 0.1875 2.992188 0.148438 2.609375 0.078125 C 2.222656 0.00390625 1.804688 -0.109375 1.359375 -0.265625 L 1.359375 -1.46875 C 1.785156 -1.238281 2.195312 -1.066406 2.59375 -0.953125 C 3 -0.847656 3.378906 -0.796875 3.734375 -0.796875 C 4.242188 -0.796875 4.640625 -0.898438 4.921875 -1.109375 C 5.210938 -1.316406 5.359375 -1.609375 5.359375 -1.984375 C 5.359375 -2.523438 4.835938 -2.898438 3.796875 -3.109375 L 3.75 -3.125 L 3.3125 -3.21875 C 2.632812 -3.34375 2.140625 -3.5625 1.828125 -3.875 C 1.523438 -4.1875 1.375 -4.609375 1.375 -5.140625 C 1.375 -5.828125 1.601562 -6.351562 2.0625 -6.71875 C 2.53125 -7.09375 3.191406 -7.28125 4.046875 -7.28125 C 4.421875 -7.28125 4.785156 -7.242188 5.140625 -7.171875 C 5.492188 -7.109375 5.835938 -7.003906 6.171875 -6.859375 Z M 6.171875 -6.859375 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="145.2" y="151"></text>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:end;font-family:monospace;font-style:normal;font-weight:normal" x="180" y="151"></text>
|
<symbol overflow="visible" id="glyph1-7">
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="82.4" y="254"></text>
|
<path style="stroke:none;" d=""/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph1-8">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="715.724,499 715.724,540 78.4,540 78.4,292.705 "/>
|
<path style="stroke:none;" d="M 3.890625 -9.125 L 3.890625 -7.109375 L 6.546875 -7.109375 L 6.546875 -6.203125 L 3.890625 -6.203125 L 3.890625 -2.34375 C 3.890625 -1.820312 3.988281 -1.457031 4.1875 -1.25 C 4.394531 -1.039062 4.742188 -0.9375 5.234375 -0.9375 L 6.546875 -0.9375 L 6.546875 0 L 5.125 0 C 4.25 0 3.628906 -0.171875 3.265625 -0.515625 C 2.910156 -0.867188 2.734375 -1.476562 2.734375 -2.34375 L 2.734375 -6.203125 L 0.828125 -6.203125 L 0.828125 -7.109375 L 2.734375 -7.109375 L 2.734375 -9.125 Z M 3.890625 -9.125 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="83.4,305.353 78.4,289.353 73.4,305.353 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="397.062" y="537">Modifies</text>
|
<symbol overflow="visible" id="glyph1-9">
|
||||||
</g>
|
<path style="stroke:none;" d="M 3.90625 -6.296875 C 3.3125 -6.296875 2.863281 -6.0625 2.5625 -5.59375 C 2.257812 -5.132812 2.109375 -4.453125 2.109375 -3.546875 C 2.109375 -2.648438 2.257812 -1.96875 2.5625 -1.5 C 2.863281 -1.039062 3.3125 -0.8125 3.90625 -0.8125 C 4.507812 -0.8125 4.960938 -1.039062 5.265625 -1.5 C 5.566406 -1.96875 5.71875 -2.648438 5.71875 -3.546875 C 5.71875 -4.453125 5.566406 -5.132812 5.265625 -5.59375 C 4.960938 -6.0625 4.507812 -6.296875 3.90625 -6.296875 Z M 3.90625 -7.28125 C 4.894531 -7.28125 5.648438 -6.957031 6.171875 -6.3125 C 6.691406 -5.675781 6.953125 -4.753906 6.953125 -3.546875 C 6.953125 -2.335938 6.691406 -1.410156 6.171875 -0.765625 C 5.648438 -0.128906 4.894531 0.1875 3.90625 0.1875 C 2.925781 0.1875 2.175781 -0.128906 1.65625 -0.765625 C 1.132812 -1.410156 0.875 -2.335938 0.875 -3.546875 C 0.875 -4.753906 1.132812 -5.675781 1.65625 -6.3125 C 2.175781 -6.957031 2.925781 -7.28125 3.90625 -7.28125 Z M 3.90625 -7.28125 "/>
|
||||||
<g>
|
</symbol>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="1036,309.94 1036,381 614.155,381 "/>
|
<symbol overflow="visible" id="glyph1-10">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="626.803,376 610.803,381 626.803,386 "/>
|
<path style="stroke:none;" d="M 5.453125 -3.609375 C 5.453125 -4.484375 5.304688 -5.148438 5.015625 -5.609375 C 4.734375 -6.066406 4.316406 -6.296875 3.765625 -6.296875 C 3.191406 -6.296875 2.753906 -6.066406 2.453125 -5.609375 C 2.160156 -5.148438 2.015625 -4.484375 2.015625 -3.609375 C 2.015625 -2.734375 2.164062 -2.066406 2.46875 -1.609375 C 2.769531 -1.148438 3.207031 -0.921875 3.78125 -0.921875 C 4.320312 -0.921875 4.734375 -1.148438 5.015625 -1.609375 C 5.304688 -2.066406 5.453125 -2.734375 5.453125 -3.609375 Z M 6.609375 -0.453125 C 6.609375 0.609375 6.359375 1.414062 5.859375 1.96875 C 5.359375 2.519531 4.617188 2.796875 3.640625 2.796875 C 3.316406 2.796875 2.976562 2.765625 2.625 2.703125 C 2.269531 2.640625 1.921875 2.550781 1.578125 2.4375 L 1.578125 1.28125 C 1.992188 1.476562 2.367188 1.625 2.703125 1.71875 C 3.046875 1.8125 3.359375 1.859375 3.640625 1.859375 C 4.265625 1.859375 4.722656 1.6875 5.015625 1.34375 C 5.304688 1 5.453125 0.457031 5.453125 -0.28125 L 5.453125 -1.125 C 5.265625 -0.726562 5.007812 -0.429688 4.6875 -0.234375 C 4.363281 -0.046875 3.972656 0.046875 3.515625 0.046875 C 2.679688 0.046875 2.015625 -0.28125 1.515625 -0.9375 C 1.023438 -1.601562 0.78125 -2.492188 0.78125 -3.609375 C 0.78125 -4.722656 1.023438 -5.613281 1.515625 -6.28125 C 2.015625 -6.945312 2.679688 -7.28125 3.515625 -7.28125 C 3.972656 -7.28125 4.359375 -7.1875 4.671875 -7 C 4.984375 -6.820312 5.242188 -6.539062 5.453125 -6.15625 L 5.453125 -7.078125 L 6.609375 -7.078125 Z M 6.609375 -0.453125 "/>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:monospace;font-style:normal;font-weight:normal" x="821.725" y="378">Launches</text>
|
</symbol>
|
||||||
</g>
|
<symbol overflow="visible" id="glyph1-11">
|
||||||
<g>
|
<path style="stroke:none;" d="M 6.734375 -0.359375 C 6.421875 -0.179688 6.097656 -0.046875 5.765625 0.046875 C 5.429688 0.140625 5.09375 0.1875 4.75 0.1875 C 3.644531 0.1875 2.78125 -0.140625 2.15625 -0.796875 C 1.539062 -1.460938 1.234375 -2.378906 1.234375 -3.546875 C 1.234375 -4.710938 1.539062 -5.625 2.15625 -6.28125 C 2.78125 -6.945312 3.644531 -7.28125 4.75 -7.28125 C 5.09375 -7.28125 5.425781 -7.234375 5.75 -7.140625 C 6.070312 -7.054688 6.398438 -6.921875 6.734375 -6.734375 L 6.734375 -5.515625 C 6.421875 -5.785156 6.109375 -5.984375 5.796875 -6.109375 C 5.492188 -6.234375 5.144531 -6.296875 4.75 -6.296875 C 4.019531 -6.296875 3.457031 -6.054688 3.0625 -5.578125 C 2.664062 -5.109375 2.46875 -4.429688 2.46875 -3.546875 C 2.46875 -2.671875 2.664062 -1.992188 3.0625 -1.515625 C 3.457031 -1.046875 4.019531 -0.8125 4.75 -0.8125 C 5.15625 -0.8125 5.519531 -0.875 5.84375 -1 C 6.164062 -1.125 6.460938 -1.316406 6.734375 -1.578125 Z M 6.734375 -0.359375 "/>
|
||||||
<rect style="fill: #ffffff" x="1082.9" y="43.1" width="88.25" height="28"/>
|
</symbol>
|
||||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="1082.9" y="43.1" width="88.25" height="28"/>
|
<symbol overflow="visible" id="glyph1-12">
|
||||||
<text font-size="16" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="1127.02" y="62.1">Strategy</text>
|
<path style="stroke:none;" d="M 6.671875 -4.40625 L 6.671875 0 L 5.5 0 L 5.5 -4.40625 C 5.5 -5.039062 5.382812 -5.507812 5.15625 -5.8125 C 4.9375 -6.113281 4.585938 -6.265625 4.109375 -6.265625 C 3.554688 -6.265625 3.132812 -6.070312 2.84375 -5.6875 C 2.550781 -5.300781 2.40625 -4.742188 2.40625 -4.015625 L 2.40625 0 L 1.234375 0 L 1.234375 -7.109375 L 2.40625 -7.109375 L 2.40625 -6.046875 C 2.613281 -6.453125 2.894531 -6.757812 3.25 -6.96875 C 3.601562 -7.175781 4.023438 -7.28125 4.515625 -7.28125 C 5.234375 -7.28125 5.769531 -7.039062 6.125 -6.5625 C 6.488281 -6.09375 6.671875 -5.375 6.671875 -4.40625 Z M 6.671875 -4.40625 "/>
|
||||||
</g>
|
</symbol>
|
||||||
<g>
|
<symbol overflow="visible" id="glyph1-13">
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 8; stroke: #000000" points="966.45,23 1020.17,23 1020.17,57.1 1075.22,57.1 "/>
|
<path style="stroke:none;" d="M 6.75 -9.875 L 6.75 -8.90625 L 5.421875 -8.90625 C 5.003906 -8.90625 4.710938 -8.816406 4.546875 -8.640625 C 4.378906 -8.472656 4.296875 -8.171875 4.296875 -7.734375 L 4.296875 -7.109375 L 6.75 -7.109375 L 6.75 -6.203125 L 4.296875 -6.203125 L 4.296875 0 L 3.140625 0 L 3.140625 -6.203125 L 1.234375 -6.203125 L 1.234375 -7.109375 L 3.140625 -7.109375 L 3.140625 -7.609375 C 3.140625 -8.378906 3.316406 -8.945312 3.671875 -9.3125 C 4.023438 -9.6875 4.582031 -9.875 5.34375 -9.875 Z M 6.75 -9.875 "/>
|
||||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="1062.57,62.1 1078.57,57.1 1062.57,52.1 "/>
|
</symbol>
|
||||||
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:monospace;font-style:normal;font-weight:normal" x="1022.17" y="37.05">uses</text>
|
<symbol overflow="visible" id="glyph1-14">
|
||||||
</g>
|
<path style="stroke:none;" d="M 1.234375 -2.6875 L 1.234375 -7.09375 L 2.40625 -7.09375 L 2.40625 -2.6875 C 2.40625 -2.050781 2.515625 -1.582031 2.734375 -1.28125 C 2.960938 -0.976562 3.316406 -0.828125 3.796875 -0.828125 C 4.347656 -0.828125 4.769531 -1.019531 5.0625 -1.40625 C 5.351562 -1.800781 5.5 -2.359375 5.5 -3.078125 L 5.5 -7.09375 L 6.671875 -7.09375 L 6.671875 0 L 5.5 0 L 5.5 -1.0625 C 5.289062 -0.65625 5.003906 -0.34375 4.640625 -0.125 C 4.285156 0.0820312 3.867188 0.1875 3.390625 0.1875 C 2.660156 0.1875 2.117188 -0.0507812 1.765625 -0.53125 C 1.410156 -1.007812 1.234375 -1.726562 1.234375 -2.6875 Z M 1.234375 -2.6875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-15">
|
||||||
|
<path style="stroke:none;" d="M 7.328125 -5.640625 C 7.078125 -5.835938 6.820312 -5.976562 6.5625 -6.0625 C 6.3125 -6.15625 6.03125 -6.203125 5.71875 -6.203125 C 4.988281 -6.203125 4.429688 -5.972656 4.046875 -5.515625 C 3.660156 -5.054688 3.46875 -4.394531 3.46875 -3.53125 L 3.46875 0 L 2.296875 0 L 2.296875 -7.109375 L 3.46875 -7.109375 L 3.46875 -5.71875 C 3.664062 -6.21875 3.96875 -6.601562 4.375 -6.875 C 4.78125 -7.144531 5.257812 -7.28125 5.8125 -7.28125 C 6.09375 -7.28125 6.359375 -7.242188 6.609375 -7.171875 C 6.859375 -7.097656 7.097656 -6.988281 7.328125 -6.84375 Z M 7.328125 -5.640625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-16">
|
||||||
|
<path style="stroke:none;" d="M 4.453125 -3.578125 L 4.0625 -3.578125 C 3.382812 -3.578125 2.875 -3.457031 2.53125 -3.21875 C 2.1875 -2.976562 2.015625 -2.617188 2.015625 -2.140625 C 2.015625 -1.710938 2.140625 -1.378906 2.390625 -1.140625 C 2.648438 -0.910156 3.007812 -0.796875 3.46875 -0.796875 C 4.113281 -0.796875 4.617188 -1.019531 4.984375 -1.46875 C 5.359375 -1.914062 5.546875 -2.53125 5.546875 -3.3125 L 5.546875 -3.578125 Z M 6.71875 -4.0625 L 6.71875 0 L 5.546875 0 L 5.546875 -1.046875 C 5.296875 -0.628906 4.976562 -0.316406 4.59375 -0.109375 C 4.21875 0.0859375 3.757812 0.1875 3.21875 0.1875 C 2.5 0.1875 1.921875 -0.015625 1.484375 -0.421875 C 1.054688 -0.835938 0.84375 -1.382812 0.84375 -2.0625 C 0.84375 -2.851562 1.109375 -3.453125 1.640625 -3.859375 C 2.171875 -4.273438 2.953125 -4.484375 3.984375 -4.484375 L 5.546875 -4.484375 L 5.546875 -4.671875 C 5.546875 -5.234375 5.398438 -5.644531 5.109375 -5.90625 C 4.828125 -6.164062 4.378906 -6.296875 3.765625 -6.296875 C 3.359375 -6.296875 2.953125 -6.238281 2.546875 -6.125 C 2.140625 -6.007812 1.742188 -5.84375 1.359375 -5.625 L 1.359375 -6.78125 C 1.796875 -6.945312 2.210938 -7.070312 2.609375 -7.15625 C 3.003906 -7.238281 3.390625 -7.28125 3.765625 -7.28125 C 4.347656 -7.28125 4.847656 -7.191406 5.265625 -7.015625 C 5.679688 -6.847656 6.019531 -6.585938 6.28125 -6.234375 C 6.4375 -6.023438 6.546875 -5.765625 6.609375 -5.453125 C 6.679688 -5.140625 6.71875 -4.675781 6.71875 -4.0625 Z M 6.71875 -4.0625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-17">
|
||||||
|
<path style="stroke:none;" d="M 4.296875 -6.390625 C 4.429688 -6.691406 4.609375 -6.914062 4.828125 -7.0625 C 5.054688 -7.207031 5.328125 -7.28125 5.640625 -7.28125 C 6.210938 -7.28125 6.613281 -7.054688 6.84375 -6.609375 C 7.082031 -6.171875 7.203125 -5.34375 7.203125 -4.125 L 7.203125 0 L 6.140625 0 L 6.140625 -4.0625 C 6.140625 -5.070312 6.082031 -5.695312 5.96875 -5.9375 C 5.851562 -6.175781 5.648438 -6.296875 5.359375 -6.296875 C 5.015625 -6.296875 4.78125 -6.164062 4.65625 -5.90625 C 4.53125 -5.644531 4.46875 -5.03125 4.46875 -4.0625 L 4.46875 0 L 3.40625 0 L 3.40625 -4.0625 C 3.40625 -5.082031 3.34375 -5.707031 3.21875 -5.9375 C 3.101562 -6.175781 2.890625 -6.296875 2.578125 -6.296875 C 2.265625 -6.296875 2.046875 -6.164062 1.921875 -5.90625 C 1.804688 -5.644531 1.75 -5.03125 1.75 -4.0625 L 1.75 0 L 0.6875 0 L 0.6875 -7.109375 L 1.75 -7.109375 L 1.75 -6.5 C 1.894531 -6.75 2.070312 -6.941406 2.28125 -7.078125 C 2.488281 -7.210938 2.722656 -7.28125 2.984375 -7.28125 C 3.304688 -7.28125 3.570312 -7.207031 3.78125 -7.0625 C 4 -6.914062 4.171875 -6.691406 4.296875 -6.390625 Z M 4.296875 -6.390625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-18">
|
||||||
|
<path style="stroke:none;" d="M 6.671875 -4.40625 L 6.671875 0 L 5.5 0 L 5.5 -4.40625 C 5.5 -5.039062 5.382812 -5.507812 5.15625 -5.8125 C 4.9375 -6.113281 4.585938 -6.265625 4.109375 -6.265625 C 3.554688 -6.265625 3.132812 -6.070312 2.84375 -5.6875 C 2.550781 -5.300781 2.40625 -4.742188 2.40625 -4.015625 L 2.40625 0 L 1.234375 0 L 1.234375 -9.875 L 2.40625 -9.875 L 2.40625 -6.046875 C 2.613281 -6.453125 2.894531 -6.757812 3.25 -6.96875 C 3.601562 -7.175781 4.023438 -7.28125 4.515625 -7.28125 C 5.234375 -7.28125 5.769531 -7.039062 6.125 -6.5625 C 6.488281 -6.09375 6.671875 -5.375 6.671875 -4.40625 Z M 6.671875 -4.40625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-19">
|
||||||
|
<path style="stroke:none;" d="M 0.640625 -7.109375 L 1.84375 -7.109375 L 3.90625 -1.140625 L 5.984375 -7.109375 L 7.1875 -7.109375 L 4.671875 0 L 3.15625 0 Z M 0.640625 -7.109375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-20">
|
||||||
|
<path style="stroke:none;" d="M 7.015625 -0.78125 C 6.671875 -0.46875 6.28125 -0.226562 5.84375 -0.0625 C 5.414062 0.101562 4.953125 0.1875 4.453125 0.1875 C 3.253906 0.1875 2.316406 -0.242188 1.640625 -1.109375 C 0.972656 -1.972656 0.640625 -3.179688 0.640625 -4.734375 C 0.640625 -6.273438 0.976562 -7.476562 1.65625 -8.34375 C 2.332031 -9.21875 3.273438 -9.65625 4.484375 -9.65625 C 4.878906 -9.65625 5.257812 -9.597656 5.625 -9.484375 C 5.988281 -9.367188 6.34375 -9.195312 6.6875 -8.96875 L 6.6875 -7.65625 C 6.34375 -7.976562 5.988281 -8.21875 5.625 -8.375 C 5.269531 -8.53125 4.890625 -8.609375 4.484375 -8.609375 C 3.648438 -8.609375 3.023438 -8.285156 2.609375 -7.640625 C 2.191406 -6.992188 1.984375 -6.023438 1.984375 -4.734375 C 1.984375 -3.410156 2.1875 -2.429688 2.59375 -1.796875 C 3 -1.171875 3.617188 -0.859375 4.453125 -0.859375 C 4.734375 -0.859375 4.976562 -0.890625 5.1875 -0.953125 C 5.40625 -1.015625 5.601562 -1.117188 5.78125 -1.265625 L 5.78125 -3.8125 L 4.40625 -3.8125 L 4.40625 -4.859375 L 7.015625 -4.859375 Z M 7.015625 -0.78125 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-21">
|
||||||
|
<path style="stroke:none;" d="M 5.453125 -6.203125 L 5.453125 -9.875 L 6.609375 -9.875 L 6.609375 0 L 5.453125 0 L 5.453125 -0.890625 C 5.253906 -0.546875 4.992188 -0.28125 4.671875 -0.09375 C 4.347656 0.09375 3.972656 0.1875 3.546875 0.1875 C 2.691406 0.1875 2.015625 -0.144531 1.515625 -0.8125 C 1.023438 -1.476562 0.78125 -2.398438 0.78125 -3.578125 C 0.78125 -4.734375 1.023438 -5.640625 1.515625 -6.296875 C 2.015625 -6.953125 2.691406 -7.28125 3.546875 -7.28125 C 3.972656 -7.28125 4.347656 -7.1875 4.671875 -7 C 5.003906 -6.820312 5.265625 -6.554688 5.453125 -6.203125 Z M 2.015625 -3.546875 C 2.015625 -2.640625 2.15625 -1.957031 2.4375 -1.5 C 2.726562 -1.039062 3.15625 -0.8125 3.71875 -0.8125 C 4.28125 -0.8125 4.707031 -1.039062 5 -1.5 C 5.300781 -1.96875 5.453125 -2.648438 5.453125 -3.546875 C 5.453125 -4.453125 5.300781 -5.132812 5 -5.59375 C 4.707031 -6.0625 4.28125 -6.296875 3.71875 -6.296875 C 3.15625 -6.296875 2.726562 -6.0625 2.4375 -5.59375 C 2.15625 -5.132812 2.015625 -4.453125 2.015625 -3.546875 Z M 2.015625 -3.546875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-22">
|
||||||
|
<path style="stroke:none;" d="M 0.875 -9.484375 L 2.5 -9.484375 L 5.703125 -1.671875 L 5.703125 -9.484375 L 6.9375 -9.484375 L 6.9375 0 L 5.3125 0 L 2.125 -7.796875 L 2.125 0 L 0.875 0 Z M 0.875 -9.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-23">
|
||||||
|
<path style="stroke:none;" d="M 7.09375 -7.109375 L 4.546875 -3.703125 L 7.34375 0 L 6 0 L 3.90625 -2.84375 L 1.828125 0 L 0.484375 0 L 3.28125 -3.703125 L 0.734375 -7.109375 L 2.03125 -7.109375 L 3.90625 -4.53125 L 5.78125 -7.109375 Z M 7.09375 -7.109375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-24">
|
||||||
|
<path style="stroke:none;" d="M 0.296875 -9.484375 L 7.53125 -9.484375 L 7.53125 -8.390625 L 4.5625 -8.390625 L 4.5625 0 L 3.28125 0 L 3.28125 -8.390625 L 0.296875 -8.390625 Z M 0.296875 -9.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-25">
|
||||||
|
<path style="stroke:none;" d="M 2.765625 -1.046875 C 3.847656 -1.046875 4.601562 -1.3125 5.03125 -1.84375 C 5.457031 -2.375 5.671875 -3.335938 5.671875 -4.734375 C 5.671875 -6.128906 5.457031 -7.09375 5.03125 -7.625 C 4.601562 -8.15625 3.847656 -8.421875 2.765625 -8.421875 L 2.15625 -8.421875 L 2.15625 -1.046875 Z M 2.796875 -9.484375 C 4.242188 -9.484375 5.304688 -9.097656 5.984375 -8.328125 C 6.671875 -7.554688 7.015625 -6.359375 7.015625 -4.734375 C 7.015625 -3.109375 6.671875 -1.910156 5.984375 -1.140625 C 5.304688 -0.378906 4.242188 0 2.796875 0 L 0.875 0 L 0.875 -9.484375 Z M 2.796875 -9.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-26">
|
||||||
|
<path style="stroke:none;" d="M 6.8125 -0.34375 C 6.488281 -0.164062 6.15625 -0.0351562 5.8125 0.046875 C 5.46875 0.140625 5.101562 0.1875 4.71875 0.1875 C 3.5 0.1875 2.550781 -0.238281 1.875 -1.09375 C 1.207031 -1.957031 0.875 -3.171875 0.875 -4.734375 C 0.875 -6.273438 1.210938 -7.476562 1.890625 -8.34375 C 2.566406 -9.21875 3.507812 -9.65625 4.71875 -9.65625 C 5.101562 -9.65625 5.46875 -9.609375 5.8125 -9.515625 C 6.15625 -9.429688 6.488281 -9.300781 6.8125 -9.125 L 6.8125 -7.8125 C 6.5 -8.070312 6.160156 -8.269531 5.796875 -8.40625 C 5.441406 -8.539062 5.082031 -8.609375 4.71875 -8.609375 C 3.882812 -8.609375 3.257812 -8.285156 2.84375 -7.640625 C 2.425781 -6.992188 2.21875 -6.023438 2.21875 -4.734375 C 2.21875 -3.429688 2.425781 -2.457031 2.84375 -1.8125 C 3.257812 -1.175781 3.882812 -0.859375 4.71875 -0.859375 C 5.09375 -0.859375 5.457031 -0.925781 5.8125 -1.0625 C 6.164062 -1.195312 6.5 -1.394531 6.8125 -1.65625 Z M 6.8125 -0.34375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-27">
|
||||||
|
<path style="stroke:none;" d="M 0.546875 -9.484375 L 2.265625 -9.484375 L 3.890625 -4.65625 L 5.546875 -9.484375 L 7.265625 -9.484375 L 7.265625 0 L 6.078125 0 L 6.078125 -8.375 L 4.390625 -3.375 L 3.421875 -3.375 L 1.734375 -8.375 L 1.734375 0 L 0.546875 0 Z M 0.546875 -9.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph1-28">
|
||||||
|
<path style="stroke:none;" d="M 1.359375 -9.484375 L 2.65625 -9.484375 L 2.65625 -1.078125 L 7.234375 -1.078125 L 7.234375 0 L 1.359375 0 Z M 1.359375 -9.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-0">
|
||||||
|
<path style="stroke:none;" d="M 0.640625 2.296875 L 0.640625 -9.171875 L 7.140625 -9.171875 L 7.140625 2.296875 Z M 1.375 1.578125 L 6.421875 1.578125 L 6.421875 -8.4375 L 1.375 -8.4375 Z M 1.375 1.578125 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-1">
|
||||||
|
<path style="stroke:none;" d="M 6.9375 -1.734375 L 3.125 -1.734375 L 2.515625 0 L 0.0625 0 L 3.578125 -9.484375 L 6.484375 -9.484375 L 10 0 L 7.546875 0 Z M 3.734375 -3.484375 L 6.328125 -3.484375 L 5.03125 -7.25 Z M 3.734375 -3.484375 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-2">
|
||||||
|
<path style="stroke:none;" d="M 5.921875 -6.0625 L 5.921875 -9.875 L 8.21875 -9.875 L 8.21875 0 L 5.921875 0 L 5.921875 -1.03125 C 5.609375 -0.613281 5.265625 -0.304688 4.890625 -0.109375 C 4.515625 0.0859375 4.082031 0.1875 3.59375 0.1875 C 2.707031 0.1875 1.984375 -0.160156 1.421875 -0.859375 C 0.859375 -1.554688 0.578125 -2.453125 0.578125 -3.546875 C 0.578125 -4.640625 0.859375 -5.535156 1.421875 -6.234375 C 1.984375 -6.929688 2.707031 -7.28125 3.59375 -7.28125 C 4.082031 -7.28125 4.515625 -7.179688 4.890625 -6.984375 C 5.265625 -6.785156 5.609375 -6.476562 5.921875 -6.0625 Z M 4.4375 -1.46875 C 4.914062 -1.46875 5.28125 -1.644531 5.53125 -2 C 5.789062 -2.351562 5.921875 -2.867188 5.921875 -3.546875 C 5.921875 -4.222656 5.789062 -4.738281 5.53125 -5.09375 C 5.28125 -5.445312 4.914062 -5.625 4.4375 -5.625 C 3.945312 -5.625 3.570312 -5.445312 3.3125 -5.09375 C 3.0625 -4.738281 2.9375 -4.222656 2.9375 -3.546875 C 2.9375 -2.867188 3.0625 -2.351562 3.3125 -2 C 3.570312 -1.644531 3.945312 -1.46875 4.4375 -1.46875 Z M 4.4375 -1.46875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-3">
|
||||||
|
<path style="stroke:none;" d="M 7.6875 -5.921875 C 7.96875 -6.367188 8.304688 -6.707031 8.703125 -6.9375 C 9.097656 -7.164062 9.535156 -7.28125 10.015625 -7.28125 C 10.828125 -7.28125 11.445312 -7.023438 11.875 -6.515625 C 12.300781 -6.015625 12.515625 -5.285156 12.515625 -4.328125 L 12.515625 0 L 10.234375 0 L 10.234375 -3.703125 C 10.234375 -3.765625 10.234375 -3.820312 10.234375 -3.875 C 10.242188 -3.9375 10.25 -4.019531 10.25 -4.125 C 10.25 -4.632812 10.171875 -5 10.015625 -5.21875 C 9.867188 -5.445312 9.632812 -5.5625 9.3125 -5.5625 C 8.875 -5.5625 8.535156 -5.382812 8.296875 -5.03125 C 8.066406 -4.675781 7.945312 -4.160156 7.9375 -3.484375 L 7.9375 0 L 5.65625 0 L 5.65625 -3.703125 C 5.65625 -4.492188 5.585938 -5 5.453125 -5.21875 C 5.316406 -5.445312 5.078125 -5.5625 4.734375 -5.5625 C 4.296875 -5.5625 3.957031 -5.382812 3.71875 -5.03125 C 3.476562 -4.675781 3.359375 -4.164062 3.359375 -3.5 L 3.359375 0 L 1.078125 0 L 1.078125 -7.109375 L 3.359375 -7.109375 L 3.359375 -6.0625 C 3.640625 -6.46875 3.960938 -6.769531 4.328125 -6.96875 C 4.691406 -7.175781 5.085938 -7.28125 5.515625 -7.28125 C 6.015625 -7.28125 6.453125 -7.160156 6.828125 -6.921875 C 7.203125 -6.679688 7.488281 -6.347656 7.6875 -5.921875 Z M 7.6875 -5.921875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-4">
|
||||||
|
<path style="stroke:none;" d="M 1.09375 -7.109375 L 3.359375 -7.109375 L 3.359375 0 L 1.09375 0 Z M 1.09375 -9.875 L 3.359375 -9.875 L 3.359375 -8.03125 L 1.09375 -8.03125 Z M 1.09375 -9.875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-5">
|
||||||
|
<path style="stroke:none;" d="M 8.234375 -4.328125 L 8.234375 0 L 5.953125 0 L 5.953125 -3.3125 C 5.953125 -3.925781 5.9375 -4.347656 5.90625 -4.578125 C 5.882812 -4.816406 5.835938 -4.988281 5.765625 -5.09375 C 5.679688 -5.238281 5.5625 -5.351562 5.40625 -5.4375 C 5.257812 -5.519531 5.085938 -5.5625 4.890625 -5.5625 C 4.410156 -5.5625 4.035156 -5.378906 3.765625 -5.015625 C 3.492188 -4.648438 3.359375 -4.144531 3.359375 -3.5 L 3.359375 0 L 1.09375 0 L 1.09375 -7.109375 L 3.359375 -7.109375 L 3.359375 -6.0625 C 3.703125 -6.476562 4.066406 -6.785156 4.453125 -6.984375 C 4.835938 -7.179688 5.265625 -7.28125 5.734375 -7.28125 C 6.554688 -7.28125 7.175781 -7.023438 7.59375 -6.515625 C 8.019531 -6.015625 8.234375 -5.285156 8.234375 -4.328125 Z M 8.234375 -4.328125 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-6">
|
||||||
|
<path style="stroke:none;" d="M 6.640625 -6.890625 L 6.640625 -5.15625 C 6.160156 -5.363281 5.691406 -5.515625 5.234375 -5.609375 C 4.785156 -5.710938 4.359375 -5.765625 3.953125 -5.765625 C 3.523438 -5.765625 3.203125 -5.710938 2.984375 -5.609375 C 2.773438 -5.503906 2.671875 -5.335938 2.671875 -5.109375 C 2.671875 -4.929688 2.75 -4.789062 2.90625 -4.6875 C 3.070312 -4.59375 3.359375 -4.519531 3.765625 -4.46875 L 4.171875 -4.421875 C 5.335938 -4.273438 6.117188 -4.03125 6.515625 -3.6875 C 6.921875 -3.351562 7.125 -2.820312 7.125 -2.09375 C 7.125 -1.332031 6.84375 -0.757812 6.28125 -0.375 C 5.726562 0 4.894531 0.1875 3.78125 0.1875 C 3.3125 0.1875 2.828125 0.148438 2.328125 0.078125 C 1.828125 0.00390625 1.3125 -0.109375 0.78125 -0.265625 L 0.78125 -1.984375 C 1.226562 -1.765625 1.691406 -1.597656 2.171875 -1.484375 C 2.648438 -1.378906 3.132812 -1.328125 3.625 -1.328125 C 4.070312 -1.328125 4.40625 -1.382812 4.625 -1.5 C 4.851562 -1.625 4.96875 -1.8125 4.96875 -2.0625 C 4.96875 -2.257812 4.890625 -2.40625 4.734375 -2.5 C 4.578125 -2.601562 4.269531 -2.6875 3.8125 -2.75 L 3.40625 -2.796875 C 2.394531 -2.921875 1.6875 -3.15625 1.28125 -3.5 C 0.875 -3.84375 0.671875 -4.363281 0.671875 -5.0625 C 0.671875 -5.8125 0.925781 -6.367188 1.4375 -6.734375 C 1.957031 -7.097656 2.753906 -7.28125 3.828125 -7.28125 C 4.242188 -7.28125 4.679688 -7.25 5.140625 -7.1875 C 5.597656 -7.125 6.097656 -7.023438 6.640625 -6.890625 Z M 6.640625 -6.890625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-7">
|
||||||
|
<path style="stroke:none;" d="M 3.578125 -9.125 L 3.578125 -7.109375 L 5.921875 -7.109375 L 5.921875 -5.484375 L 3.578125 -5.484375 L 3.578125 -2.46875 C 3.578125 -2.132812 3.640625 -1.910156 3.765625 -1.796875 C 3.898438 -1.679688 4.160156 -1.625 4.546875 -1.625 L 5.71875 -1.625 L 5.71875 0 L 3.765625 0 C 2.867188 0 2.234375 -0.1875 1.859375 -0.5625 C 1.484375 -0.9375 1.296875 -1.570312 1.296875 -2.46875 L 1.296875 -5.484375 L 0.171875 -5.484375 L 0.171875 -7.109375 L 1.296875 -7.109375 L 1.296875 -9.125 Z M 3.578125 -9.125 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-8">
|
||||||
|
<path style="stroke:none;" d="M 6.375 -5.171875 C 6.175781 -5.265625 5.976562 -5.332031 5.78125 -5.375 C 5.582031 -5.425781 5.382812 -5.453125 5.1875 -5.453125 C 4.601562 -5.453125 4.148438 -5.265625 3.828125 -4.890625 C 3.515625 -4.515625 3.359375 -3.976562 3.359375 -3.28125 L 3.359375 0 L 1.09375 0 L 1.09375 -7.109375 L 3.359375 -7.109375 L 3.359375 -5.9375 C 3.648438 -6.40625 3.984375 -6.742188 4.359375 -6.953125 C 4.742188 -7.171875 5.203125 -7.28125 5.734375 -7.28125 C 5.804688 -7.28125 5.882812 -7.273438 5.96875 -7.265625 C 6.0625 -7.265625 6.191406 -7.253906 6.359375 -7.234375 Z M 6.375 -5.171875 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-9">
|
||||||
|
<path style="stroke:none;" d="M 4.28125 -3.203125 C 3.800781 -3.203125 3.441406 -3.117188 3.203125 -2.953125 C 2.960938 -2.796875 2.84375 -2.5625 2.84375 -2.25 C 2.84375 -1.957031 2.9375 -1.726562 3.125 -1.5625 C 3.320312 -1.40625 3.59375 -1.328125 3.9375 -1.328125 C 4.363281 -1.328125 4.722656 -1.476562 5.015625 -1.78125 C 5.304688 -2.09375 5.453125 -2.476562 5.453125 -2.9375 L 5.453125 -3.203125 Z M 7.75 -4.0625 L 7.75 0 L 5.453125 0 L 5.453125 -1.046875 C 5.148438 -0.617188 4.804688 -0.304688 4.421875 -0.109375 C 4.046875 0.0859375 3.585938 0.1875 3.046875 0.1875 C 2.304688 0.1875 1.707031 -0.0234375 1.25 -0.453125 C 0.789062 -0.890625 0.5625 -1.453125 0.5625 -2.140625 C 0.5625 -2.972656 0.847656 -3.582031 1.421875 -3.96875 C 1.992188 -4.351562 2.894531 -4.546875 4.125 -4.546875 L 5.453125 -4.546875 L 5.453125 -4.734375 C 5.453125 -5.085938 5.3125 -5.347656 5.03125 -5.515625 C 4.75 -5.679688 4.304688 -5.765625 3.703125 -5.765625 C 3.222656 -5.765625 2.769531 -5.71875 2.34375 -5.625 C 1.925781 -5.53125 1.539062 -5.382812 1.1875 -5.1875 L 1.1875 -6.921875 C 1.664062 -7.035156 2.148438 -7.125 2.640625 -7.1875 C 3.140625 -7.25 3.632812 -7.28125 4.125 -7.28125 C 5.40625 -7.28125 6.328125 -7.023438 6.890625 -6.515625 C 7.460938 -6.015625 7.75 -5.195312 7.75 -4.0625 Z M 7.75 -4.0625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-10">
|
||||||
|
<path style="stroke:none;" d="M 4.46875 -5.65625 C 3.96875 -5.65625 3.582031 -5.472656 3.3125 -5.109375 C 3.050781 -4.753906 2.921875 -4.234375 2.921875 -3.546875 C 2.921875 -2.867188 3.050781 -2.347656 3.3125 -1.984375 C 3.582031 -1.617188 3.96875 -1.4375 4.46875 -1.4375 C 4.96875 -1.4375 5.347656 -1.617188 5.609375 -1.984375 C 5.867188 -2.347656 6 -2.867188 6 -3.546875 C 6 -4.234375 5.867188 -4.753906 5.609375 -5.109375 C 5.347656 -5.472656 4.96875 -5.65625 4.46875 -5.65625 Z M 4.46875 -7.28125 C 5.695312 -7.28125 6.65625 -6.945312 7.34375 -6.28125 C 8.03125 -5.625 8.375 -4.710938 8.375 -3.546875 C 8.375 -2.378906 8.03125 -1.460938 7.34375 -0.796875 C 6.65625 -0.140625 5.695312 0.1875 4.46875 0.1875 C 3.25 0.1875 2.289062 -0.140625 1.59375 -0.796875 C 0.90625 -1.460938 0.5625 -2.378906 0.5625 -3.546875 C 0.5625 -4.710938 0.90625 -5.625 1.59375 -6.28125 C 2.289062 -6.945312 3.25 -7.28125 4.46875 -7.28125 Z M 4.46875 -7.28125 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-11">
|
||||||
|
<path style="stroke:none;" d="M 8.703125 -0.515625 C 8.253906 -0.285156 7.785156 -0.113281 7.296875 0 C 6.816406 0.125 6.3125 0.1875 5.78125 0.1875 C 4.207031 0.1875 2.957031 -0.253906 2.03125 -1.140625 C 1.101562 -2.023438 0.640625 -3.222656 0.640625 -4.734375 C 0.640625 -6.242188 1.101562 -7.441406 2.03125 -8.328125 C 2.957031 -9.210938 4.207031 -9.65625 5.78125 -9.65625 C 6.3125 -9.65625 6.816406 -9.59375 7.296875 -9.46875 C 7.785156 -9.351562 8.253906 -9.175781 8.703125 -8.9375 L 8.703125 -6.984375 C 8.253906 -7.296875 7.804688 -7.519531 7.359375 -7.65625 C 6.921875 -7.800781 6.460938 -7.875 5.984375 -7.875 C 5.109375 -7.875 4.421875 -7.59375 3.921875 -7.03125 C 3.421875 -6.476562 3.171875 -5.710938 3.171875 -4.734375 C 3.171875 -3.753906 3.421875 -2.984375 3.921875 -2.421875 C 4.421875 -1.867188 5.109375 -1.59375 5.984375 -1.59375 C 6.460938 -1.59375 6.921875 -1.660156 7.359375 -1.796875 C 7.804688 -1.941406 8.253906 -2.171875 8.703125 -2.484375 Z M 8.703125 -0.515625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-12">
|
||||||
|
<path style="stroke:none;" d="M 1.015625 -2.765625 L 1.015625 -7.109375 L 3.296875 -7.109375 L 3.296875 -6.40625 C 3.296875 -6.019531 3.289062 -5.535156 3.28125 -4.953125 C 3.28125 -4.367188 3.28125 -3.976562 3.28125 -3.78125 C 3.28125 -3.207031 3.296875 -2.796875 3.328125 -2.546875 C 3.359375 -2.296875 3.410156 -2.113281 3.484375 -2 C 3.578125 -1.851562 3.695312 -1.738281 3.84375 -1.65625 C 4 -1.570312 4.175781 -1.53125 4.375 -1.53125 C 4.84375 -1.53125 5.210938 -1.710938 5.484375 -2.078125 C 5.753906 -2.441406 5.890625 -2.945312 5.890625 -3.59375 L 5.890625 -7.109375 L 8.15625 -7.109375 L 8.15625 0 L 5.890625 0 L 5.890625 -1.03125 C 5.546875 -0.613281 5.179688 -0.304688 4.796875 -0.109375 C 4.421875 0.0859375 4 0.1875 3.53125 0.1875 C 2.707031 0.1875 2.082031 -0.0625 1.65625 -0.5625 C 1.226562 -1.070312 1.015625 -1.804688 1.015625 -2.765625 Z M 1.015625 -2.765625 "/>
|
||||||
|
</symbol>
|
||||||
|
<symbol overflow="visible" id="glyph2-13">
|
||||||
|
<path style="stroke:none;" d="M 8.1875 -3.578125 L 8.1875 -2.921875 L 2.875 -2.921875 C 2.925781 -2.390625 3.117188 -1.988281 3.453125 -1.71875 C 3.785156 -1.457031 4.25 -1.328125 4.84375 -1.328125 C 5.3125 -1.328125 5.796875 -1.394531 6.296875 -1.53125 C 6.804688 -1.675781 7.328125 -1.894531 7.859375 -2.1875 L 7.859375 -0.4375 C 7.316406 -0.226562 6.773438 -0.0703125 6.234375 0.03125 C 5.703125 0.132812 5.164062 0.1875 4.625 0.1875 C 3.34375 0.1875 2.34375 -0.140625 1.625 -0.796875 C 0.914062 -1.453125 0.5625 -2.367188 0.5625 -3.546875 C 0.5625 -4.703125 0.910156 -5.613281 1.609375 -6.28125 C 2.304688 -6.945312 3.269531 -7.28125 4.5 -7.28125 C 5.613281 -7.28125 6.503906 -6.941406 7.171875 -6.265625 C 7.847656 -5.597656 8.1875 -4.703125 8.1875 -3.578125 Z M 5.859375 -4.328125 C 5.859375 -4.765625 5.726562 -5.113281 5.46875 -5.375 C 5.21875 -5.632812 4.890625 -5.765625 4.484375 -5.765625 C 4.046875 -5.765625 3.6875 -5.640625 3.40625 -5.390625 C 3.132812 -5.148438 2.96875 -4.796875 2.90625 -4.328125 Z M 5.859375 -4.328125 "/>
|
||||||
|
</symbol>
|
||||||
|
</g>
|
||||||
|
</defs>
|
||||||
|
<g id="surface25169">
|
||||||
|
<rect x="0" y="0" width="1146" height="548" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 28.5 4.95 L 35.825 4.95 L 35.825 6.35 L 28.5 6.35 Z M 28.5 4.95 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-1" x="537.601562" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-2" x="549.984375" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-3" x="561.371094" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-4" x="572.816406" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="578.304688" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-6" x="585.960938" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-7" x="623.109375" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="623.109375" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-9" x="633.96875" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-10" x="650.648438" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-11" x="662.09375" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="667.582031" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="678.382812" y="110"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="686.039062" y="110"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10.6 7 L 19.475 7 L 19.475 8.4 L 10.6 8.4 Z M 10.6 7 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-13" x="191" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-10" x="204.59375" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="216.039063" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-14" x="226.898438" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-15" x="238.285156" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="249.808594" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="257.464844" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="268.265625" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-17" x="277.757812" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-6" x="288.402344" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-18" x="293.96875" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-11" x="305.707031" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-2" x="311.195312" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-19" x="322.582031" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="332.113281" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="339.769531" y="151"/>
|
||||||
|
<use xlink:href="#glyph0-20" x="350.628906" y="151"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 28.451953 5.65 L 22.3 5.65 L 22.3 7.7 L 19.85957 7.7 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 20.491797 7.45 L 19.691797 7.7 L 20.491797 7.95 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-1" x="422" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-2" x="429.695313" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-2" x="437.390625" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-3" x="445.085938" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="452.78125" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="460.476563" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="468.171875" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="475.867188" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="483.5625" y="121.5"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="491.257812" y="121.5"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 30.75 11.35 L 33.669922 11.35 L 33.669922 12.75 L 30.75 12.75 Z M 30.75 11.35 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-1" x="594.019531" y="238"/>
|
||||||
|
<use xlink:href="#glyph0-2" x="606.402344" y="238"/>
|
||||||
|
<use xlink:href="#glyph0-3" x="617.789062" y="238"/>
|
||||||
|
<use xlink:href="#glyph0-4" x="629.234375" y="238"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="634.722656" y="238"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 32.209961 11.299805 L 32.209961 9.424805 L 32.215039 9.424805 L 32.215039 6.685352 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 32.465039 7.317578 L 32.215039 6.517578 L 31.965039 7.317578 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-10" x="529.753906" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="537.449219" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="545.144531" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="552.839844" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="560.535156" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="568.230469" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="575.925781" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="583.621094" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="591.316406" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="599.011719" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-10" x="606.707031" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="614.402344" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="622.097656" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-16" x="629.792969" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="637.488281" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="645.183594" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="652.878906" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="660.574219" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="668.269531" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="675.964844" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="683.660156" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="691.355469" y="176.496094"/>
|
||||||
|
<use xlink:href="#glyph1-17" x="699.050781" y="176.496094"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.8 0.45 L 48.322461 0.45 L 48.322461 1.85 L 45.8 1.85 Z M 45.8 0.45 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-21" x="895.03125" y="20"/>
|
||||||
|
<use xlink:href="#glyph0-22" x="908.15625" y="20"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="919.152344" y="20"/>
|
||||||
|
<use xlink:href="#glyph0-11" x="929.953125" y="20"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 32.1625 4.899609 L 32.1625 3.6 L 47.061328 3.6 L 47.061328 2.235547 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 47.311328 2.867969 L 47.061328 2.067969 L 46.811328 2.867969 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-1" x="735.457031" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="743.152344" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-18" x="750.847656" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="758.542969" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="766.238281" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-19" x="773.933594" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="781.628906" y="60"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="789.324219" y="60"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 24.75 18.35 L 30.372461 18.35 L 30.372461 19.75 L 24.75 19.75 Z M 24.75 18.35 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-1" x="474.054688" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="486.4375" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="495.929688" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-4" x="503.585938" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-22" x="509.074219" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-14" x="520.070312" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-6" x="531.457031" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-23" x="537.023438" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-11" x="548.742188" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="554.230469" y="378"/>
|
||||||
|
<use xlink:href="#glyph0-14" x="565.03125" y="378"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 32.209961 12.8 L 32.209961 14.925 L 26.15 14.925 L 26.15 17.814648 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 25.9 17.182422 L 26.15 17.982422 L 26.4 17.182422 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-20" x="522.972656" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="530.667969" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="538.363281" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="546.058594" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="553.753906" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-16" x="561.449219" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="569.144531" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="576.839844" y="286.5"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="584.535156" y="286.5"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 34.1 23.55 L 37.472461 23.55 L 37.472461 24.95 L 34.1 24.95 Z M 34.1 23.55 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-1" x="661.035156" y="482"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="673.417969" y="482"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="682.910156" y="482"/>
|
||||||
|
<use xlink:href="#glyph0-4" x="690.566406" y="482"/>
|
||||||
|
<use xlink:href="#glyph0-22" x="696.054688" y="482"/>
|
||||||
|
<use xlink:href="#glyph0-14" x="707.050781" y="482"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 27.561328 21.047266 L 27.561328 22.15 L 35.786328 22.15 L 35.786328 23.501562 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 27.561328 19.788672 L 27.801172 20.488672 L 27.561328 21.188672 L 27.321289 20.488672 Z M 27.561328 19.788672 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-4" x="553.609375" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="561.304688" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="569" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="576.695313" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="584.390625" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-17" x="592.085938" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-2" x="599.78125" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="607.476563" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="615.171875" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="622.867188" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-21" x="630.5625" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="638.257812" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="645.953125" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="653.648438" y="431"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 37.472461 24.95 L 37.472461 25.85 L 43.1 25.85 L 43.1 24.25 L 37.472461 24.25 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-22" x="737.402344" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="745.097656" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-23" x="752.792969" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="760.488281" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="768.183594" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-16" x="775.878906" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="783.574219" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="791.269531" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="798.964844" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="806.660156" y="505"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="814.355469" y="505"/>
|
||||||
|
</g>
|
||||||
|
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 824.074219 505 L 824.074219 497 L 832.074219 501 Z M 824.074219 505 "/>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 52.1 10.95 C 52.1 11.115625 51.965625 11.25 51.8 11.25 C 51.634375 11.25 51.5 11.115625 51.5 10.95 C 51.5 10.784375 51.634375 10.65 51.8 10.65 C 51.965625 10.65 52.1 10.784375 52.1 10.95 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 50.6 11.55 L 53 11.55 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 51.8 11.25 L 51.8 12.75 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 51.8 12.75 L 50.6 14.05 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 51.8 12.75 L 53 14.05 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph2-1" x="959.921875" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-2" x="969.824219" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-3" x="978.984375" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-4" x="992.324219" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-5" x="996.71875" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-4" x="1005.820312" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-6" x="1010.214844" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-7" x="1017.832031" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-8" x="1023.945312" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-9" x="1030.253906" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-7" x="1038.886719" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-10" x="1045" y="296.898438"/>
|
||||||
|
<use xlink:href="#glyph2-8" x="1053.789062" y="296.898438"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 49.295898 12.75 L 41.708203 12.75 L 41.708203 12.05 L 34.055664 12.05 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 34.688086 11.8 L 33.888086 12.05 L 34.688086 12.3 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-24" x="810.164062" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="817.859375" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="825.554688" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-10" x="833.25" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-10" x="840.945312" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="848.640625" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="856.335938" y="236"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="864.03125" y="236"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 51.9 9.649609 L 44.0625 9.649609 L 44.0625 5.65 L 36.160352 5.65 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 36.792578 5.4 L 35.992578 5.65 L 36.792578 5.9 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-25" x="857.25" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="864.945312" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="872.640625" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="880.335938" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="888.03125" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="895.726562" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="903.421875" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="911.117188" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-1" x="918.8125" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="926.507812" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-21" x="934.203125" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="941.898438" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="949.59375" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="957.289062" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="964.984375" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="972.679688" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="980.375" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="988.070312" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="995.765625" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-10" x="1003.460938" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="1011.15625" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="1018.851562" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-16" x="1026.546875" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-8" x="1034.242188" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="1041.9375" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="1049.632812" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="1057.328125" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="1065.023438" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="1072.71875" y="140.996094"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="1080.414062" y="140.996094"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.45 1.4 C 5.45 1.565625 5.315625 1.7 5.15 1.7 C 4.984375 1.7 4.85 1.565625 4.85 1.4 C 4.85 1.234375 4.984375 1.1 5.15 1.1 C 5.315625 1.1 5.45 1.234375 5.45 1.4 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.95 2 L 6.35 2 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.15 1.7 L 5.15 3.2 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.15 3.2 L 3.95 4.5 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 5.15 3.2 L 6.35 4.5 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph2-11" x="42.332031" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-12" x="51.726562" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-6" x="60.828125" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-7" x="68.445312" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-10" x="74.558594" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-3" x="83.347656" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-13" x="96.6875" y="105.898438"/>
|
||||||
|
<use xlink:href="#glyph2-8" x="105.359375" y="105.898438"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 6.88418 3.2 L 15.0375 3.2 L 15.0375 6.664648 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 14.7875 6.032422 L 15.0375 6.832422 L 15.2875 6.032422 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-26" x="123.957031" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="131.652344" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="139.347656" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="147.042969" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="154.738281" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-17" x="162.433594" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="170.128906" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="177.824219" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="185.519531" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="193.214844" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="200.910156" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="208.605469" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="216.300781" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="223.996094" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-15" x="231.691406" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="239.386719" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="247.082031" y="52"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="254.777344" y="52"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 1.35 12.9 L 6.490039 12.9 L 6.490039 14.3 L 1.35 14.3 Z M 1.35 12.9 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-24" x="5.972656" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="18.296875" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-19" x="29.15625" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-22" x="38.6875" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-2" x="49.683594" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-20" x="61.070312" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="68.960938" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="78.453125" y="269"/>
|
||||||
|
<use xlink:href="#glyph0-19" x="89.3125" y="269"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 9.341406 7.7 L 3.919922 7.7 L 3.919922 12.9 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10.6 7.7 L 9.9 7.940039 L 9.2 7.7 L 9.9 7.459961 Z M 10.6 7.7 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 35.786133 24.95 L 35.786133 27 L 3.919922 27 L 3.919922 14.635352 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 4.169922 15.267578 L 3.919922 14.467578 L 3.669922 15.267578 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-27" x="340.28125" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="347.976563" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-21" x="355.671875" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="363.367188" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="371.0625" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-4" x="378.757813" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="386.453125" y="528"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="394.148438" y="528"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 51.8 15.49707 L 51.8 19.05 L 30.707813 19.05 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 31.340039 18.8 L 30.540039 19.05 L 31.340039 19.3 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-28" x="764.945312" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-16" x="772.640625" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-14" x="780.335938" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-12" x="788.03125" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="795.726562" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-18" x="803.421875" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="811.117188" y="369"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="818.8125" y="369"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.144922 2.155078 L 58.557422 2.155078 L 58.557422 3.555078 L 54.144922 3.555078 Z M 54.144922 2.155078 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-15" x="1061.902344" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="1073.425781" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-20" x="1081.082031" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="1088.972656" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="1099.773438" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-8" x="1107.429688" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-25" x="1118.289062" y="54.101562"/>
|
||||||
|
<use xlink:href="#glyph0-26" x="1129.734375" y="54.101562"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.4,0.4;stroke-miterlimit:10;" d="M 48.322461 1.15 L 51.008594 1.15 L 51.008594 2.855078 L 53.760742 2.855078 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 53.12832 3.105078 L 53.92832 2.855078 L 53.12832 2.605078 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-14" x="996.171875" y="28.050781"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="1003.867188" y="28.050781"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="1011.5625" y="28.050781"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="1019.257812" y="28.050781"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:none;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 27.561328 21.058594 L 27.561328 22.15 L 19.345703 22.15 L 19.345703 23.652734 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 27.561328 19.8 L 27.801172 20.5 L 27.561328 21.2 L 27.321289 20.5 Z M 27.561328 19.8 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph1-4" x="389.203125" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="396.898438" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="404.59375" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-11" x="412.289062" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="419.984375" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-17" x="427.679688" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-2" x="435.375" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="443.070312" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-6" x="450.765625" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-5" x="458.460938" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-21" x="466.15625" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-7" x="473.851562" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-9" x="481.546875" y="431"/>
|
||||||
|
<use xlink:href="#glyph1-13" x="489.242188" y="431"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 15.201953 23.652734 L 23.489453 23.652734 L 23.489453 25.052734 L 15.201953 25.052734 Z M 15.201953 23.652734 " transform="matrix(20,0,0,20,-26,-8)"/>
|
||||||
|
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
|
||||||
|
<use xlink:href="#glyph0-27" x="283.082031" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-28" x="294.019531" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="311.871094" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="321.363281" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="332.164062" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-26" x="341.65625" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-6" x="352.085938" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-29" x="357.652344" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-14" x="363.609375" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-3" x="374.996094" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-4" x="386.441406" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-16" x="391.929688" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-12" x="401.421875" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-5" x="412.222656" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-22" x="419.878906" y="484.054688"/>
|
||||||
|
<use xlink:href="#glyph0-20" x="430.875" y="484.054688"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 89 KiB |
BIN
doc/source/images/watcher_db_schema_diagram.png
Normal file
After Width: | Height: | Size: 49 KiB |
@ -73,6 +73,7 @@ Plugins
|
|||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
dev/plugin/base-setup
|
dev/plugin/base-setup
|
||||||
|
dev/plugin/goal-plugin
|
||||||
dev/plugin/strategy-plugin
|
dev/plugin/strategy-plugin
|
||||||
dev/plugin/action-plugin
|
dev/plugin/action-plugin
|
||||||
dev/plugin/planner-plugin
|
dev/plugin/planner-plugin
|
||||||
|
@ -16,9 +16,11 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
An :ref:`Action Plan <action_plan_definition>` is a flow of
|
An :ref:`Action Plan <action_plan_definition>` specifies a flow of
|
||||||
:ref:`Actions <action_definition>` that should be executed in order to satisfy
|
:ref:`Actions <action_definition>` that should be executed in order to satisfy
|
||||||
a given :ref:`Goal <goal_definition>`.
|
a given :ref:`Goal <goal_definition>`. It also contains an estimated
|
||||||
|
:ref:`global efficacy <efficacy_definition>` alongside a set of
|
||||||
|
:ref:`efficacy indicators <efficacy_indicator_definition>`.
|
||||||
|
|
||||||
An :ref:`Action Plan <action_plan_definition>` is generated by Watcher when an
|
An :ref:`Action Plan <action_plan_definition>` is generated by Watcher when an
|
||||||
:ref:`Audit <audit_definition>` is successful which implies that the
|
:ref:`Audit <audit_definition>` is successful which implies that the
|
||||||
@ -26,16 +28,13 @@ An :ref:`Action Plan <action_plan_definition>` is generated by Watcher when an
|
|||||||
which was used has found a :ref:`Solution <solution_definition>` to achieve the
|
which was used has found a :ref:`Solution <solution_definition>` to achieve the
|
||||||
:ref:`Goal <goal_definition>` of this :ref:`Audit <audit_definition>`.
|
:ref:`Goal <goal_definition>` of this :ref:`Audit <audit_definition>`.
|
||||||
|
|
||||||
In the default implementation of Watcher, an
|
In the default implementation of Watcher, an action plan is composed of
|
||||||
:ref:`Action Plan <action_plan_definition>`
|
a list of successive :ref:`Actions <action_definition>` (i.e., a Workflow of
|
||||||
is only composed of successive :ref:`Actions <action_definition>`
|
:ref:`Actions <action_definition>` belonging to a unique branch).
|
||||||
(i.e., a Workflow of :ref:`Actions <action_definition>` belonging to a unique
|
|
||||||
branch).
|
|
||||||
|
|
||||||
However, Watcher provides abstract interfaces for many of its components,
|
However, Watcher provides abstract interfaces for many of its components,
|
||||||
allowing other implementations to generate and handle more complex
|
allowing other implementations to generate and handle more complex :ref:`Action
|
||||||
:ref:`Action Plan(s) <action_plan_definition>`
|
Plan(s) <action_plan_definition>` composed of two types of Action Item(s):
|
||||||
composed of two types of Action Item(s):
|
|
||||||
|
|
||||||
- simple :ref:`Actions <action_definition>`: atomic tasks, which means it
|
- simple :ref:`Actions <action_definition>`: atomic tasks, which means it
|
||||||
can not be split into smaller tasks or commands from an OpenStack point of
|
can not be split into smaller tasks or commands from an OpenStack point of
|
||||||
@ -46,13 +45,14 @@ composed of two types of Action Item(s):
|
|||||||
|
|
||||||
An :ref:`Action Plan <action_plan_definition>` may be described using
|
An :ref:`Action Plan <action_plan_definition>` may be described using
|
||||||
standard workflow model description formats such as
|
standard workflow model description formats such as
|
||||||
`Business Process Model and Notation 2.0 (BPMN 2.0) <http://www.omg.org/spec/BPMN/2.0/>`_
|
`Business Process Model and Notation 2.0 (BPMN 2.0)
|
||||||
or `Unified Modeling Language (UML) <http://www.uml.org/>`_.
|
<http://www.omg.org/spec/BPMN/2.0/>`_ or `Unified Modeling Language (UML)
|
||||||
|
<http://www.uml.org/>`_.
|
||||||
|
|
||||||
To see the life-cycle and description of
|
To see the life-cycle and description of
|
||||||
:ref:`Action Plan <action_plan_definition>` states, visit :ref:`the Action Plan state
|
:ref:`Action Plan <action_plan_definition>` states, visit :ref:`the Action Plan
|
||||||
machine <action_plan_state_machine>`.
|
state machine <action_plan_state_machine>`.
|
||||||
""" # noqa
|
"""
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
@ -15,20 +15,20 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
An efficacy indicator is a single value
|
An efficacy indicator is a single value that gives an indication on how the
|
||||||
that gives an indication on how the :ref:`solution <solution_definition>`
|
:ref:`solution <solution_definition>` produced by a given :ref:`strategy
|
||||||
produced by a given :ref:`strategy <strategy_definition>` performed. These
|
<strategy_definition>` performed. These efficacy indicators are specific to a
|
||||||
efficacy indicators are specific to a given :ref:`goal <goal_definition>` and
|
given :ref:`goal <goal_definition>` and are usually used to compute the
|
||||||
are usually used to compute the :ref:`gobal efficacy <efficacy_definition>` of
|
:ref:`gobal efficacy <efficacy_definition>` of the resulting :ref:`action plan
|
||||||
the resulting :ref:`action plan <action_plan_definition>`.
|
<action_plan_definition>`.
|
||||||
|
|
||||||
In Watcher, these efficacy indicators are specified alongside the goal they
|
In Watcher, these efficacy indicators are specified alongside the goal they
|
||||||
relate to. When a strategy (which always relates to a goal) is executed, it
|
relate to. When a strategy (which always relates to a goal) is executed, it
|
||||||
produces a solution containing the efficacy indicators specified by the
|
produces a solution containing the efficacy indicators specified by the goal.
|
||||||
goal. This solution, which has been translated by the :ref:`Watcher Planner
|
This solution, which has been translated by the :ref:`Watcher Planner
|
||||||
<watcher_planner_definition>` into an action plan, will see its
|
<watcher_planner_definition>` into an action plan, will see its indicators and
|
||||||
indicators and global efficacy stored and would now be accessible through the
|
global efficacy stored and would now be accessible through the :ref:`Watcher
|
||||||
:ref:`Watcher API <watcher_api_definition>`.
|
API <archi_watcher_api_definition>`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import numbers
|
import numbers
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# implied.
|
# implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
|
||||||
from watcher.common.messaging.events import event as watcher_event
|
from watcher.common.messaging.events import event as watcher_event
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
"""
|
||||||
|
An efficacy specfication is a contract that is associated to each :ref:`Goal
|
||||||
|
<goal_definition>` that defines the various :ref:`efficacy indicators
|
||||||
|
<efficacy_indicator_definition>` a strategy achieving the associated goal
|
||||||
|
should provide within its :ref:`solution <solution_definition>`. Indeed, each
|
||||||
|
solution proposed by a strategy will be validated against this contract before
|
||||||
|
calculating its :ref:`global efficacy <efficacy_definition>`.
|
||||||
|
"""
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
@ -18,10 +18,17 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
"""
|
"""
|
||||||
A :ref:`Solution <solution_definition>` is a set of
|
A :ref:`Solution <solution_definition>` is the result of execution of a
|
||||||
:ref:`Actions <action_definition>` generated by a
|
:ref:`strategy <strategy_definition>` (i.e., an algorithm).
|
||||||
:ref:`Strategy <strategy_definition>` (i.e., an algorithm) in order to achieve
|
Each solution is composed of many pieces of information:
|
||||||
the :ref:`Goal <goal_definition>` of an :ref:`Audit <audit_definition>`.
|
|
||||||
|
- A set of :ref:`actions <action_definition>` generated by the strategy in
|
||||||
|
order to achieve the :ref:`goal <goal_definition>` of an associated
|
||||||
|
:ref:`audit <audit_definition>`.
|
||||||
|
- A set of :ref:`efficacy indicators <efficacy_indicator_definition>` as
|
||||||
|
defined by the associated goal
|
||||||
|
- A :ref:`global efficacy <efficacy_definition>` which is computed by the
|
||||||
|
associated goal using the aforementioned efficacy indicators.
|
||||||
|
|
||||||
A :ref:`Solution <solution_definition>` is different from an
|
A :ref:`Solution <solution_definition>` is different from an
|
||||||
:ref:`Action Plan <action_plan_definition>` because it contains the
|
:ref:`Action Plan <action_plan_definition>` because it contains the
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: python-watcher 0.26.1.dev33\n"
|
"Project-Id-Version: python-watcher 0.26.1.dev88\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2016-05-11 15:31+0200\n"
|
"POT-Creation-Date: 2016-06-02 10:23+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -48,24 +48,24 @@ msgid ""
|
|||||||
"'public_endpoint' option."
|
"'public_endpoint' option."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/action.py:364
|
#: watcher/api/controllers/v1/action.py:365
|
||||||
msgid "Cannot create an action directly"
|
msgid "Cannot create an action directly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/action.py:388
|
#: watcher/api/controllers/v1/action.py:389
|
||||||
msgid "Cannot modify an action directly"
|
msgid "Cannot modify an action directly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/action.py:424
|
#: watcher/api/controllers/v1/action.py:425
|
||||||
msgid "Cannot delete an action directly"
|
msgid "Cannot delete an action directly"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/action_plan.py:87
|
#: watcher/api/controllers/v1/action_plan.py:91
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Invalid state: %(state)s"
|
msgid "Invalid state: %(state)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/action_plan.py:407
|
#: watcher/api/controllers/v1/action_plan.py:451
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State transition not allowed: (%(initial_state)s -> %(new_state)s)"
|
msgid "State transition not allowed: (%(initial_state)s -> %(new_state)s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -74,15 +74,15 @@ msgstr ""
|
|||||||
msgid "The audit template UUID or name specified is invalid"
|
msgid "The audit template UUID or name specified is invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/audit_template.py:138
|
#: watcher/api/controllers/v1/audit_template.py:141
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"'%(strategy)s' strategy does relate to the '%(goal)s' goal. Possible "
|
"'%(strategy)s' strategy does relate to the '%(goal)s' goal. Possible "
|
||||||
"choices: %(choices)s"
|
"choices: %(choices)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/audit_template.py:160
|
#: watcher/api/controllers/v1/audit_template.py:169
|
||||||
msgid "Cannot remove 'goal_uuid' attribute from an audit template"
|
msgid "Cannot remove 'goal' attribute from an audit template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/api/controllers/v1/types.py:123
|
#: watcher/api/controllers/v1/types.py:123
|
||||||
@ -146,18 +146,19 @@ msgstr ""
|
|||||||
msgid "The target state is not defined"
|
msgid "The target state is not defined"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/applier/actions/migration.py:71
|
#: watcher/applier/actions/migration.py:69
|
||||||
msgid "The parameter resource_id is invalid."
|
msgid "The parameter resource_id is invalid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/applier/actions/migration.py:124
|
#: watcher/applier/actions/migration.py:123
|
||||||
|
#: watcher/applier/actions/migration.py:137
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unexpected error occured. Migration failed forinstance %s. Leaving "
|
"Unexpected error occured. Migration failed forinstance %s. Leaving "
|
||||||
"instance on previous host."
|
"instance on previous host."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/applier/actions/migration.py:140
|
#: watcher/applier/actions/migration.py:155
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Migration of type %(migration_type)s is not supported."
|
msgid "Migration of type %(migration_type)s is not supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -176,22 +177,22 @@ msgstr ""
|
|||||||
msgid "Oops! We need disaster recover plan"
|
msgid "Oops! We need disaster recover plan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/cmd/api.py:42
|
||||||
|
#, python-format
|
||||||
|
msgid "serving on 0.0.0.0:%(port)s, view at %(protocol)s://127.0.0.1:%(port)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/cmd/api.py:46
|
#: watcher/cmd/api.py:46
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "serving on 0.0.0.0:%(port)s, view at http://127.0.0.1:%(port)s"
|
msgid "serving on %(protocol)s://%(host)s:%(port)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/cmd/api.py:50
|
#: watcher/cmd/applier.py:38
|
||||||
#, python-format
|
|
||||||
msgid "serving on http://%(host)s:%(port)s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/cmd/applier.py:41
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Starting Watcher Applier service in PID %s"
|
msgid "Starting Watcher Applier service in PID %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/cmd/decisionengine.py:42
|
#: watcher/cmd/decisionengine.py:39
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Starting Watcher Decision Engine service in PID %s"
|
msgid "Starting Watcher Decision Engine service in PID %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -360,7 +361,7 @@ msgstr ""
|
|||||||
msgid "Action %(action)s could not be found"
|
msgid "Action %(action)s could not be found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:238
|
#: watcher/common/exception.py:238 watcher/common/exception.py:256
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "An action with UUID %(uuid)s already exists"
|
msgid "An action with UUID %(uuid)s already exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -374,87 +375,114 @@ msgstr ""
|
|||||||
msgid "Filtering actions on both audit and action-plan is prohibited"
|
msgid "Filtering actions on both audit and action-plan is prohibited"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:256
|
#: watcher/common/exception.py:252
|
||||||
|
#, python-format
|
||||||
|
msgid "Efficacy indicator %(efficacy_indicator)s could not be found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:264
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Couldn't apply patch '%(patch)s'. Reason: %(reason)s"
|
msgid "Couldn't apply patch '%(patch)s'. Reason: %(reason)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:262
|
#: watcher/common/exception.py:270
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Workflow execution error: %(error)s"
|
msgid "Workflow execution error: %(error)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:266
|
#: watcher/common/exception.py:274
|
||||||
msgid "Illegal argument"
|
msgid "Illegal argument"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:270
|
#: watcher/common/exception.py:278
|
||||||
msgid "No such metric"
|
msgid "No such metric"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:274
|
#: watcher/common/exception.py:282
|
||||||
msgid "No rows were returned"
|
msgid "No rows were returned"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:278
|
#: watcher/common/exception.py:286
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(client)s connection failed. Reason: %(reason)s"
|
msgid "%(client)s connection failed. Reason: %(reason)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:282
|
#: watcher/common/exception.py:290
|
||||||
msgid "'Keystone API endpoint is missing''"
|
msgid "'Keystone API endpoint is missing''"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:286
|
#: watcher/common/exception.py:294
|
||||||
msgid "The list of hypervisor(s) in the cluster is empty"
|
msgid "The list of hypervisor(s) in the cluster is empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:290
|
#: watcher/common/exception.py:298
|
||||||
msgid "The metrics resource collector is not defined"
|
msgid "The metrics resource collector is not defined"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:294
|
#: watcher/common/exception.py:302
|
||||||
msgid "The cluster state is not defined"
|
msgid "The cluster state is not defined"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:298
|
#: watcher/common/exception.py:306
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
msgid "No strategy could be found to achieve the '%(goal)s' goal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:304
|
#: watcher/common/exception.py:310
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The instance '%(name)s' is not found"
|
msgid "The value '%(value)s' with spec type '%(spec_type)s' is invalid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:308
|
#: watcher/common/exception.py:315
|
||||||
msgid "The hypervisor is not found"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/common/exception.py:312
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Error loading plugin '%(name)s'"
|
msgid ""
|
||||||
msgstr ""
|
"Could not compute the global efficacy for the '%(goal)s' goal using the "
|
||||||
|
"'%(strategy)s' strategy."
|
||||||
#: watcher/common/exception.py:316
|
|
||||||
#, python-format
|
|
||||||
msgid "The identifier '%(name)s' is a reserved word"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:320
|
#: watcher/common/exception.py:320
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The %(name)s resource %(id)s is not soft deleted"
|
msgid "No values returned by %(resource_id)s for %(metric_name)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/exception.py:324
|
#: watcher/common/exception.py:324
|
||||||
|
#, python-format
|
||||||
|
msgid "No %(metric)s metric for %(host)s found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:330
|
||||||
|
#, python-format
|
||||||
|
msgid "The instance '%(name)s' is not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:334
|
||||||
|
msgid "The hypervisor is not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:338
|
||||||
|
#, python-format
|
||||||
|
msgid "Error loading plugin '%(name)s'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:342
|
||||||
|
#, python-format
|
||||||
|
msgid "The identifier '%(name)s' is a reserved word"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:346
|
||||||
|
#, python-format
|
||||||
|
msgid "The %(name)s resource %(id)s is not soft deleted"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/exception.py:350
|
||||||
msgid "Limit should be positive"
|
msgid "Limit should be positive"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/service.py:40
|
#: watcher/common/service.py:43
|
||||||
msgid "Seconds between running periodic tasks."
|
msgid "Seconds between running periodic tasks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/service.py:43
|
#: watcher/common/service.py:46
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name of this node. This can be an opaque identifier. It is not "
|
"Name of this node. This can be an opaque identifier. It is not "
|
||||||
"necessarily a hostname, FQDN, or IP address. However, the node name must "
|
"necessarily a hostname, FQDN, or IP address. However, the node name must "
|
||||||
@ -462,7 +490,11 @@ msgid ""
|
|||||||
" or IP address."
|
" or IP address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/common/utils.py:53
|
#: watcher/common/service.py:226
|
||||||
|
msgid "Plugins"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/common/utils.py:76
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Failed to remove trailing character. Returning original object.Supplied "
|
"Failed to remove trailing character. Returning original object.Supplied "
|
||||||
@ -477,231 +509,266 @@ msgstr ""
|
|||||||
msgid "Messaging configuration error"
|
msgid "Messaging configuration error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:50
|
#: watcher/db/purge.py:51
|
||||||
msgid "Goals"
|
msgid "Goals"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:51
|
#: watcher/db/purge.py:52
|
||||||
msgid "Strategies"
|
msgid "Strategies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:52
|
#: watcher/db/purge.py:53
|
||||||
msgid "Audit Templates"
|
msgid "Audit Templates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:53
|
#: watcher/db/purge.py:54
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:54
|
#: watcher/db/purge.py:55
|
||||||
msgid "Action Plans"
|
msgid "Action Plans"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:55
|
#: watcher/db/purge.py:56
|
||||||
msgid "Actions"
|
msgid "Actions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:102
|
#: watcher/db/purge.py:103
|
||||||
msgid "Total"
|
msgid "Total"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:160
|
#: watcher/db/purge.py:166
|
||||||
msgid "Audit Template"
|
msgid "Audit Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:227
|
#: watcher/db/purge.py:233
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Orphans found:\n"
|
"Orphans found:\n"
|
||||||
"%s"
|
"%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:306
|
#: watcher/db/purge.py:312
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "There are %(count)d objects set for deletion. Continue? [y/N]"
|
msgid "There are %(count)d objects set for deletion. Continue? [y/N]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:313
|
#: watcher/db/purge.py:319
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The number of objects (%(num)s) to delete from the database exceeds the "
|
"The number of objects (%(num)s) to delete from the database exceeds the "
|
||||||
"maximum number of objects (%(max_number)s) specified."
|
"maximum number of objects (%(max_number)s) specified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:318
|
#: watcher/db/purge.py:324
|
||||||
msgid "Do you want to delete objects up to the specified maximum number? [y/N]"
|
msgid "Do you want to delete objects up to the specified maximum number? [y/N]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:408
|
#: watcher/db/purge.py:414
|
||||||
msgid "Deleting..."
|
msgid "Deleting..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:414
|
#: watcher/db/purge.py:420
|
||||||
msgid "Starting purge command"
|
msgid "Starting purge command"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:424
|
#: watcher/db/purge.py:430
|
||||||
msgid " (orphans excluded)"
|
msgid " (orphans excluded)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:425
|
#: watcher/db/purge.py:431
|
||||||
msgid " (may include orphans)"
|
msgid " (may include orphans)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:428 watcher/db/purge.py:429
|
#: watcher/db/purge.py:434 watcher/db/purge.py:435
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Purge results summary%s:"
|
msgid "Purge results summary%s:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:432
|
#: watcher/db/purge.py:438
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Here below is a table containing the objects that can be purged%s:"
|
msgid "Here below is a table containing the objects that can be purged%s:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/purge.py:437
|
#: watcher/db/purge.py:443
|
||||||
msgid "Purge process completed"
|
msgid "Purge process completed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:443
|
#: watcher/db/sqlalchemy/api.py:477
|
||||||
msgid "Cannot overwrite UUID for an existing Goal."
|
msgid "Cannot overwrite UUID for an existing Goal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:509
|
#: watcher/db/sqlalchemy/api.py:543
|
||||||
msgid "Cannot overwrite UUID for an existing Strategy."
|
msgid "Cannot overwrite UUID for an existing Strategy."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:586
|
#: watcher/db/sqlalchemy/api.py:620
|
||||||
msgid "Cannot overwrite UUID for an existing Audit Template."
|
msgid "Cannot overwrite UUID for an existing Audit Template."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:683
|
#: watcher/db/sqlalchemy/api.py:717
|
||||||
msgid "Cannot overwrite UUID for an existing Audit."
|
msgid "Cannot overwrite UUID for an existing Audit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:778
|
#: watcher/db/sqlalchemy/api.py:812
|
||||||
msgid "Cannot overwrite UUID for an existing Action."
|
msgid "Cannot overwrite UUID for an existing Action."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/api.py:891
|
#: watcher/db/sqlalchemy/api.py:925
|
||||||
msgid "Cannot overwrite UUID for an existing Action Plan."
|
msgid "Cannot overwrite UUID for an existing Action Plan."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/db/sqlalchemy/api.py:1004
|
||||||
|
msgid "Cannot overwrite UUID for an existing efficacy indicator."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/db/sqlalchemy/migration.py:73
|
#: watcher/db/sqlalchemy/migration.py:73
|
||||||
msgid ""
|
msgid ""
|
||||||
"Watcher database schema is already under version control; use upgrade() "
|
"Watcher database schema is already under version control; use upgrade() "
|
||||||
"instead"
|
"instead"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:94
|
#: watcher/decision_engine/sync.py:106
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Goal %s already exists"
|
msgid "Goal %s already exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:103
|
#: watcher/decision_engine/sync.py:115
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Strategy %s already exists"
|
msgid "Strategy %s already exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:125
|
#: watcher/decision_engine/sync.py:138
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Goal %s created"
|
msgid "Goal %s created"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:154
|
#: watcher/decision_engine/sync.py:167
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Strategy %s created"
|
msgid "Strategy %s created"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:180
|
#: watcher/decision_engine/sync.py:193
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Audit Template '%s' synced"
|
msgid "Audit Template '%s' synced"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:225
|
#: watcher/decision_engine/sync.py:238
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Audit Template '%(audit_template)s' references a goal that does not exist"
|
msgid "Audit Template '%(audit_template)s' references a goal that does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:240
|
#: watcher/decision_engine/sync.py:253
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Audit Template '%(audit_template)s' references a strategy that does not "
|
"Audit Template '%(audit_template)s' references a strategy that does not "
|
||||||
"exist"
|
"exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:279
|
#: watcher/decision_engine/sync.py:310
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Goal %s unchanged"
|
msgid "Goal %s unchanged"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:281
|
#: watcher/decision_engine/sync.py:312
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Goal %s modified"
|
msgid "Goal %s modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:295
|
#: watcher/decision_engine/sync.py:326
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Strategy %s unchanged"
|
msgid "Strategy %s unchanged"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/sync.py:297
|
#: watcher/decision_engine/sync.py:328
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Strategy %s modified"
|
msgid "Strategy %s modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/goals.py:34
|
||||||
|
msgid "Dummy goal"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/goals.py:62
|
||||||
|
msgid "Unclassified"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/goals.py:82
|
||||||
|
msgid "Server consolidation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/goals.py:102
|
||||||
|
msgid "Thermal optimization"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/goals.py:122
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_stabilization.py:130
|
||||||
|
msgid "Workload balancing"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/efficacy/indicators.py:80
|
||||||
|
msgid "Average CPU load as a percentage of the CPU time."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/efficacy/indicators.py:95
|
||||||
|
msgid ""
|
||||||
|
"Represents the percentage of released nodes out of the total number of "
|
||||||
|
"migrations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/efficacy/indicators.py:111
|
||||||
|
msgid "The number of compute nodes to be released."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/efficacy/indicators.py:125
|
||||||
|
msgid "The number of migrations to be performed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/goal/efficacy/specs.py:107
|
||||||
|
msgid "Ratio of released compute nodes divided by the number of VM migrations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/model/model_root.py:33
|
#: watcher/decision_engine/model/model_root.py:33
|
||||||
#: watcher/decision_engine/model/model_root.py:38
|
#: watcher/decision_engine/model/model_root.py:38
|
||||||
msgid "'obj' argument type is not valid"
|
msgid "'obj' argument type is not valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/planner/default.py:78
|
#: watcher/decision_engine/planner/default.py:80
|
||||||
msgid "The action plan is empty"
|
msgid "The action plan is empty"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/solution/efficacy.py:41
|
||||||
|
msgid "An indicator value should be a number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/selection/default.py:74
|
#: watcher/decision_engine/strategy/selection/default.py:74
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not load any strategy for goal %(goal)s"
|
msgid "Could not load any strategy for goal %(goal)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/base.py:165
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:117
|
||||||
msgid "Dummy goal"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/base.py:188
|
|
||||||
msgid "Unclassified"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/base.py:204
|
|
||||||
msgid "Server consolidation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/base.py:220
|
|
||||||
msgid "Thermal optimization"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:119
|
|
||||||
msgid "Basic offline consolidation"
|
msgid "Basic offline consolidation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:296
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:263
|
||||||
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:343
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:305
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No values returned by %(resource_id)s for %(metric_name)s"
|
msgid "No values returned by %(resource_id)s for %(metric_name)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:456
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:414
|
||||||
msgid "Initializing Sercon Consolidation"
|
msgid "Initializing Sercon Consolidation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:500
|
#: watcher/decision_engine/strategy/strategies/basic_consolidation.py:456
|
||||||
msgid "The workloads of the compute nodes of the cluster is zero"
|
msgid "The workloads of the compute nodes of the cluster is zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/dummy_strategy.py:74
|
#: watcher/decision_engine/strategy/strategies/dummy_strategy.py:78
|
||||||
msgid "Dummy strategy"
|
msgid "Dummy strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:102
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:103
|
||||||
msgid "Outlet temperature based strategy"
|
msgid "Outlet temperature based strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -710,16 +777,20 @@ msgstr ""
|
|||||||
msgid "%s: no outlet temp data"
|
msgid "%s: no outlet temp data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:181
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:180
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "VM not active, skipped: %s"
|
msgid "VM not active, skipped: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:239
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:186
|
||||||
|
msgid "VM not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:235
|
||||||
msgid "No hosts under outlet temp threshold found"
|
msgid "No hosts under outlet temp threshold found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:262
|
#: watcher/decision_engine/strategy/strategies/outlet_temp_control.py:255
|
||||||
msgid "No proper target host could be found"
|
msgid "No proper target host could be found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -732,20 +803,68 @@ msgstr ""
|
|||||||
msgid "Unexpexted resource state type, state=%(state)s, state_type=%(st)s."
|
msgid "Unexpexted resource state type, state=%(state)s, state_type=%(st)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:180
|
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:178
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Cannot live migrate: vm_uuid=%(vm_uuid)s, state=%(vm_state)s."
|
msgid "Cannot live migrate: vm_uuid=%(vm_uuid)s, state=%(vm_state)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:264
|
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:262
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No values returned by %(resource_id)s for memory.usage or disk.root.size"
|
msgid "No values returned by %(resource_id)s for memory.usage or disk.root.size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:515
|
#: watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py:519
|
||||||
msgid "Executing Smart Strategy"
|
msgid "Executing Smart Strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:103
|
||||||
|
msgid "workload balance migration strategy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:152
|
||||||
|
#, python-format
|
||||||
|
msgid "VM not found Error: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:157
|
||||||
|
#, python-format
|
||||||
|
msgid "VM not found from hypervisor: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:233
|
||||||
|
msgid "Can not get cpu_util"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:264
|
||||||
|
msgid "Initializing Workload Balance Strategy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:282
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"No hosts current have CPU utilization under %s percent, therefore there "
|
||||||
|
"are no possible target hosts for any migration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_balance.py:305
|
||||||
|
msgid ""
|
||||||
|
"No proper target host could be found, it might be because of there's no "
|
||||||
|
"enough CPU/Memory/DISK"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_stabilization.py:173
|
||||||
|
msgid "get_vm_load started"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_stabilization.py:251
|
||||||
|
#, python-format
|
||||||
|
msgid "Incorrect mapping: could not find associated weight for %s in weight dict."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: watcher/decision_engine/strategy/strategies/workload_stabilization.py:371
|
||||||
|
msgid "Initializing Workload Stabilization"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/objects/base.py:70
|
#: watcher/objects/base.py:70
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Error setting %(attr)s"
|
msgid "Error setting %(attr)s"
|
||||||
@ -783,7 +902,7 @@ msgstr ""
|
|||||||
msgid "A datetime.datetime is required here"
|
msgid "A datetime.datetime is required here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: watcher/objects/utils.py:105
|
#: watcher/objects/utils.py:114
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "An object of class %s is required here"
|
msgid "An object of class %s is required here"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|