Agree with xiaoxiang’s solution. I'm looking forward to this feature.

> 在 2020年2月6日,18:49,weibin zhu <[email protected]> 写道:
> 
> Thanks for the reply, if everyone agrees with this solution, I can create a 
> jira and implement the code. I suggest that can define the interface and 
> framework code first. If you are interested, you can review it. If there is 
> no problem, then implement the complete code.
> @ShaoFeng Shi, @zhoukang, @Xiaoxiang Yu
> 
> ----------------------------------------
> weibin0516          
> 
> [email protected] <mailto:[email protected]>
> http://rrd.me/fT6RW
> ----------------------------------------
> 
>> 在 2020年2月5日,下午11:19,Xiaoxiang Yu <[email protected] <mailto:[email protected]>> 
>> 写道:
>> 
>> Hi codingforfun and zhoukang,
>>     I am agreed with codingforfun. Event, Listener, and ListenerBus, these 
>> components should be good abstraction/design for a monitor framework.
>>     Recently I am checking source code of System Cube and Dashboard Service 
>> in apache kylin,  I have find some exist abstraction of these 
>> components(Event, Listener, and ListenerBus). 
>> We can find them under core-mertics module 
>> (https://github.com/apache/kylin/tree/master/core-metrics/src/main/java/org/apache/kylin/metrics/lib).
>>  
>> <https://github.com/apache/kylin/tree/master/core-metrics/src/main/java/org/apache/kylin/metrics/lib).>
>>  Maybe we can implement the webhook feature by extending this metrics 
>> framework other than reinventing the wheel. I am not very sure am I right 
>> but I guess it should works.
>>     It is a draft version of and I extend some basic interface under 
>> core-mertics module, I think it not perfect at the moment, this is my patch 
>> https://github.com/hit-lacus/kylin/commit/db5b52ca81fd20b4bdd3328c90739373eba2adea
>>  
>> <https://github.com/hit-lacus/kylin/commit/db5b52ca81fd20b4bdd3328c90739373eba2adea>
>>  . I supposed my draft is intended to the beginning of the conversation, not 
>> the final implementation. If you have any comments, please let me know, 
>> thank you in advance.
>>     
>>     To test it, use the following config in kylin.properties and 
>> kylinMetrics.xml.
>> 
>> 1. kylin.properties
>>     kylin.metrics.reporter-job-enabled=true
>>     kylin.metrics.monitor-enabled=true
>>      
>> 2. kylinMetrics.xml
>> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
>> <http://www.w3.org/2001/XMLSchema-instance>"
>>        xmlns="http://www.springframework.org/schema/beans 
>> <http://www.springframework.org/schema/beans>"
>>        xsi:schemaLocation="http://www.springframework.org/schema/beans 
>> <http://www.springframework.org/schema/beans>
>>             http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
>> <http://www.springframework.org/schema/beans/spring-beans-3.1.xsd>">
>> 
>>     <description>Kylin Metrics Related Configuration 
>> (SystemCube)</description>
>> 
>>     <!-- A Reservoir which don't staged metrics message at all, emit it in 
>> no time. Maybe good for debug purpose.-->
>>     <bean id="instantReservoir" 
>> class="org.apache.kylin.metrics.lib.impl.InstantReservoir"/>
>> 
>>     <!-- A Reservoir which staged metrics message in memory, and emit them 
>> in fixed rate. -->
>>     <bean id="blockingReservoir" 
>> class="org.apache.kylin.metrics.lib.impl.BlockingReservoir">
>>         <!-- minReportSize, only if currently count of staged message exceed 
>> minReportSize, will Reservoir try to write message-->
>>         <constructor-arg index="0">
>>             <value>100</value>
>>         </constructor-arg>
>> 
>>         <!-- maxReportSize, max size of report in one time -->
>>         <constructor-arg index="1">
>>             <value>500</value>
>>         </constructor-arg>
>> 
>>         <!-- minReportTime, min duration(in minute) between two report 
>> action-->
>>         <constructor-arg index="2">
>>             <value>10</value>
>>         </constructor-arg>
>>     </bean>
>> 
>>     <bean id="hiveSink" 
>> class="org.apache.kylin.metrics.lib.impl.hive.HiveSink"/>
>>     <bean id="kafkaSink" 
>> class="org.apache.kylin.metrics.lib.impl.kafka.KafkaSink"/>
>> 
>>     <bean id="initMetricsManager" 
>> class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
>>         <property name="targetClass" 
>> value="org.apache.kylin.metrics.MetricsManager"/>
>>         <property name="targetMethod" value="initMetricsManager"/>
>>         <property name="arguments">
>>             <list>
>>                 <!-- 
>>                 Sink of System Cube.
>>                 -->
>>                 <ref bean="hiveSink"/>
>> 
>>                 <!--
>>                 Bind properties for each ActiveReservoirReporter.   
>>                 -->    
>>                 <map key-type="org.apache.kylin.metrics.lib.ActiveReservoir" 
>> value-type="java.util.List">
>> 
>>                     <!-- Each ActiveReservoir can have multi 
>> ReservoirReporter -->
>>                     <entry key-ref="instantReservoir">
>>                         <list>
>>                             <bean class="org.apache.kylin.common.util.Pair">
>>                                 <!-- Implementation of ReservoirReporter-->
>>                                 <property name="first"
>>                                           
>> value="org.apache.kylin.metrics.lib.impl.kafka.KafkaReservoirReporter"/>
>>                                 <!-- Properties for specific 
>> ReservoirReporter-->
>>                                 <property name="second">
>>                                     <props>
>>                                         <prop 
>> key="bootstrap.servers">cdh-master:9092,cdh-worker-1:9092,cdh-worker-2:9092</prop>
>>                                     </props>
>>                                 </property>
>>                             </bean>
>> 
>>                             <bean class="org.apache.kylin.common.util.Pair">
>>                                 <!-- Implementation of ReservoirReporter-->
>>                                 <property name="first"
>>                                           
>> value="org.apache.kylin.metrics.lib.impl.callback.CallbackActiveReservoirReporter"/>
>>                                 <!-- Properties for specific 
>> ReservoirReporter-->
>>                                 <property name="second">
>>                                     <props>
>>                                         <prop 
>> key="callback.url">localhost:8888</prop>
>>                                     </props>
>>                                 </property>
>>                             </bean>
>>                         </list>
>>                     </entry>
>>                 </map>
>>             </list>
>>         </property>
>>     </bean>
>> </beans>
>> 
>> 
>> 
>> 
>> --
>> Best wishes to you ! 
>> From :Xiaoxiang Yu
>> 
>> At 2020-02-05 10:03:13, "codingforfun" <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> I think we can refer to the implementation of spark listener, a few key 
>> points are as follows:
>> 1. Define interface ListenerEvent, which can implement specific events. 
>> Examples of which build cubes are CubeBuildStart, CubeBuildStepXStart, 
>> CubeBuildStepXEnd, CubeBuildEnd. These specific classes can contain a lot of 
>> information, such as owner, success/failed, error msg, resource occupation, 
>> etc
>> 2. Define interface Listener, which contains the monitoring of all events. 
>> When the user defines the Listener, some events can be selectively 
>> implemented as needed, for example, onCubeBuildStart and CubeBuildEnd can be 
>> implemented to obtain the time cost.
>> 3. Define a ListenerBus that provides the ability to register listeners(by 
>> configured custom listener class names), receive events, and dispatch events 
>> to the appropriate Listener in the background
>> 
>> 
>> 
>> 在 2020年2月4日 11:17,ShaoFeng Shi <[email protected] 
>> <mailto:[email protected]>>写道:
>> Good proposal. Is there some standard and popular framework for this? We can 
>> integrate with the best solution there.
>> 
>> Best regards,
>> 
>> Shaofeng Shi 史少锋
>> Apache Kylin PMC
>> Email: [email protected] <mailto:[email protected]>
>> 
>> Apache Kylin FAQ: https://kylin.apache.org/docs/gettingstarted/faq.html 
>> <https://kylin.apache.org/docs/gettingstarted/faq.html>
>> Join Kylin user mail group: [email protected] 
>> <mailto:[email protected]>
>> Join Kylin dev mail group: [email protected] 
>> <mailto:[email protected]>
>> 
>> 
>> 
>> 
>> Liukaige <[email protected] <mailto:[email protected]>> 于2020年1月25日周六 
>> 上午1:01写道:
>> Totally agreed. And this feature can be integrated with ETL scheduling, data 
>> governance, approval flow etc. Brilliant idea. If you need any help, count 
>> me in.
>> 
>> 朱卫斌 <[email protected] <mailto:[email protected]>> 于2020年1月20日周一 
>> 下午10:10写道:
>> I think there should be a set of kylin's event, metrics mechanism, 
>> event-driven, provide event, metrics interfaces, we can implement specific 
>> listeners in the form of plugins. For example, we can implement dingtalk 
>> plugin, SMS plugin or any other plugin, which has a high Flexibility (Not 
>> only do notifications, but also do many things, such as unifying and even 
>> interfering with the task.). We can refer to the design and implementation 
>> of spark event and metrics. 
>> I think this is very valuable, we can do it together.
>> 
>> 
>>      
>> weibin0516
>> [email protected]
>> Best wishes !
>>  
>> <https://maas.mail.163.com/dashi-web-extend/html/proSignature.html?ftlId=1&name=weibin0516&uid=codingforfun%40126.com&iconUrl=https%3A%2F%2Fmail-online.nosdn.127.net%2Fwzpmmc%2F54c20faa3a1910ad49f4a5f1965fba47.jpg&items=%5B%22codingforfun%40126.com%22%2C%22Best+wishes+%21%22%5D>
>> 签名由 网易邮箱大师 <https://mail.163.com/dashi/dlpro.html?from=mail81> 定制
>> 
>> On 01/21/2020 10:57,Xiaoxiang Yu<[email protected]> <mailto:[email protected]> 
>> wrote:
>> It looks good, and it should be useful for IT team, please go ahead!
>> 
>> 
>> --
>> Best wishes to you ! 
>> From :Xiaoxiang Yu
>> 
>> At 2020-01-20 19:58:40, "Zhou Kang" <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Hi Kylin users & developers:
>> 
>>  
>> 
>>        Many apps support webhook, it is one way that apps can send automated 
>> messages or information to other apps.
>> 
>>        Use webhook, I think we can send messages to chat tools(slack, 
>> dingding), send sms , trigger another workflow.
>> 
>>        Do we need to add webhook to Kylin? Such as when cubing job finished.
>> 
>>        What do you think about this, and which is the better way in your 
>> environment ?
>> 
>> 
>> 
>> -- 
>> Best regards,
>> 
>> Kaige Liu(刘凯歌)
>> 
>> "Do small things with great love." 
> 

Reply via email to