<div dir="ltr">I have almost understood it thanks to your explanation.<div><br></div><div>The confusion is mainly caused by the naming. I guess the main reason is that the scope evolves but the naming is not updated with it.<div><br></div><div>For example</div><div><ol><li>`vitrage_aggregated_state` actually applies for both resource state and alarm severity as defined in `value_properties`. So `vitrage_aggregated_values` could be a better name.<br></li><li>For data source in static configuration, we may use `static.yaml` as a fallback. The name `default.yaml` will mislead user that it should be applied to data source configured in "types" but without a values configuration.</li><li>The UNDEFINED value is named UNDEFINED_DATASOURCE = "undefined datasource", it is not a consistent type of severity and state enumeration.</li><li>The behavior for data source defined in static without values configuration and data source defined in "types" without values configuration are inconsistent. The former will fallback to `default.yaml` but the latter will lead to undefined value.</li></ol><div>I know it is there for historical reasons and current developers may already get used to it, but it gives new contributors too many surprises.</div><div><br></div><div>What do you think? Shall we amend them?</div></div><div><br></div><div><div class="gmail_quote"><div dir="ltr">On Tue, Jan 9, 2018 at 11:29 PM Afek, Ifat (Nokia - IL/Kfar Sava) <<a href="mailto:ifat.afek@nokia.com">ifat.afek@nokia.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">







<div bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="m_-2564694115631033734WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Hi,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">I agree that the code is confusing…<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">This is part of a change that was made in order to support default states for static entities. For example, in the static configuration yaml file you can add entities of types ‘switch’
 and ‘br-ex’. In the past, in order to support states for these new types, you needed to add switch.yaml and br-ex.yaml under /etc/vitrage/datasources_values, which you would most likely copy&paste from another datasource. Now, we have under /etc/vitrage/datasources_values
 a default.yaml file that is used for all static entities.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Back to the code, I believe this is the logic:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="m_-2564694115631033734MsoListParagraphCxSpFirst">
<u></u><span style="font-size:11.0pt;font-family:Symbol"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span dir="LTR"></span><span style="font-size:11.0pt;font-family:Calibri">If the datasource is part of ‘types’ (as defined in vitrage.conf) and has states configuration – use it. This is the normal behavior.<u></u><u></u></span></p>
<p class="m_-2564694115631033734MsoListParagraphCxSpMiddle">
<u></u><span style="font-size:11.0pt;font-family:Symbol"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span dir="LTR"></span><span style="font-size:11.0pt;font-family:Calibri">If the datasource is not part of ‘types’, we understand that it was defined in a static configuration file. Use the default states configuration. I assume
 that it is somehow handled in the first part of the if statement (I’m not so familiar with that code)<u></u><u></u></span></p>
<p class="m_-2564694115631033734MsoListParagraphCxSpLast">
<u></u><span style="font-size:11.0pt;font-family:Symbol"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span dir="LTR"></span><span style="font-size:11.0pt;font-family:Calibri">If neither is true – it means that the datasource is “real” and not static, and was defined in vitrage.conf types. And it also means that its states configuration
 is missing, so the state is UNDEFINED.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">And to your questions:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<ol style="margin-top:0cm" start="1" type="1">
<li class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">the data source is not defined -> the default states should be used<u></u><u></u></span></li><li class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">data source defined but state config not exist -> UNDEFINED state<u></u><u></u></span></li><li class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">data source defined, state config exist but the state is not found. -> I believe that somewhere in the first part of the if statement you will get UNDEFINED<u></u><u></u></span></li></ol>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Hope that’s more clear now. It might be a good idea to add some comments to that function…<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Best Regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Ifat.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-family:Calibri;color:black">From: </span>
</b><span style="font-family:Calibri;color:black">"Yujun Zhang (ZTE)" <<a href="mailto:zhangyujun%2Bzte@gmail.com" target="_blank">zhangyujun+zte@gmail.com</a>><br>
<b>Reply-To: </b>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a>><br>
<b>Date: </b>Tuesday, 9 January 2018 at 8:34<br>
<b>To: </b>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a>><br>
<b>Subject: </b>Re: [openstack-dev] [vitrage] rules in vitrage_aggregated_state()<u></u><u></u></span></p>
</div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1">
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">Forgot to paste the link to the related code:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal"><a href="https://git.openstack.org/cgit/openstack/vitrage/tree/vitrage/entity_graph/mappings/datasource_info_mapper.py#n61" target="_blank">https://git.openstack.org/cgit/openstack/vitrage/tree/vitrage/entity_graph/mappings/datasource_info_mapper.py#n61</a>
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div>
<div>
<p class="MsoNormal">On Tue, Jan 9, 2018 at 2:34 PM Yujun Zhang (ZTE) <<a href="mailto:zhangyujun%2Bzte@gmail.com" target="_blank">zhangyujun+zte@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
</div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div>
<p class="MsoNormal">Hi root causers <u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I have been inspecting the code about aggregated state recently and have a question regarding the rules.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The "not" operator in the if clause confuses me. If it is not a configured data source, how do we apply the aggregation rules? It seems this is handled in else clause.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></blockquote></div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div>
<pre><code>        if datasource_name in self.datasources_state_confs or \<u></u><u></u></code></pre>
<pre><code>                datasource_name <b>not</b> in self.conf.datasources.types:            ...<u></u><u></u></code></pre>
<pre><code>        else:<u></u><u></u></code></pre>
<pre><code>            self.category_normalizer[vitrage_category].set_aggregated_value(<u></u><u></u></code></pre>
<pre><code>                new_vertex, self.UNDEFINED_DATASOURCE)<u></u><u></u></code></pre>
<pre><code>            self.category_normalizer[vitrage_category].set_operational_value(<u></u><u></u></code></pre>
<pre><code>                new_vertex, self.UNDEFINED_DATASOURCE)</code><span style="font-size:10.5pt"><u></u><u></u></span></pre>
<div>
<pre><span style="font-size:12.0pt;font-family:Helvetica"><br>There are some test case describing the expected behavior. But I couldn't understand the design philosophy behind it. What is expected when <u></u><u></u></span></pre>
</div>
</div></div></blockquote></div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><div>
<pre style="margin-left:36.0pt"><u></u><span style="font-size:12.0pt;font-family:Helvetica"><span>1.<span style="font:7.0pt "Times New Roman"">   </span></span></span><u></u><span dir="LTR"></span><span style="font-size:12.0pt;font-family:Helvetica">the data source is not defined<u></u><u></u></span></pre>
<pre style="margin-left:36.0pt"><u></u><span style="font-size:12.0pt;font-family:Helvetica"><span>2.<span style="font:7.0pt "Times New Roman"">   </span></span></span><u></u><span dir="LTR"></span><span style="font-size:12.0pt;font-family:Helvetica">data source defined but state config not exist<u></u><u></u></span></pre>
<pre style="margin-left:36.0pt"><u></u><span style="font-size:12.0pt;font-family:Helvetica"><span>3.<span style="font:7.0pt "Times New Roman"">   </span></span></span><u></u><span dir="LTR"></span><span style="font-size:12.0pt;font-family:Helvetica">data source defined, state config exist but the state is not found.<u></u><u></u></span></pre></div></div></div></blockquote></div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><div>
<div>
<pre><span style="font-size:12.0pt;font-family:Helvetica">Could somebody shed some light on it?<u></u><u></u></span></pre>
</div>
<div>
<pre><span style="font-size:12.0pt;font-family:Helvetica"><u></u> <u></u></span></pre>
</div>
</div></div></div></blockquote></div></div></div><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-2564694115631033734WordSection1"><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><div></div>
</div>
</div>
<p class="MsoNormal"><br clear="all">
<br>
-- <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">Yujun Zhang<u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<br>
-- <u></u><u></u></p>
<p class="MsoNormal">Yujun Zhang<u></u><u></u></p>
</div>
</div>

__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</blockquote></div></div></div></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Yujun Zhang</div></div>