首页 > 编程语言 >【源码阅读】90. 插件

【源码阅读】90. 插件

时间:2023-06-25 19:11:14浏览次数:49  
标签:插件 plugin 源码 auditEvent 90 加载 event AuditEvent

 

系统相关类

PluginLoader:插件的加载类,封装了插件信息、配置加载、安装过程。包含如下组件:

● PluginInfo:含有插件的基本信息

● Plugin接口:插件初始化接口

● AuditPlugin接口:包含审计类型插件关联的操作

 

初始化

PluginMgr.init初始化时将构建内置插件AuditLogBuilder。

其实插件安装的最终目的是将插件和PluginLoader加载到内存中

 

插件安装

安装插件时将进行如下步骤:

● 下载、解压或拷贝插件文件到临时目录中

● 读取plugin.properties文件内容

● 移动临时目录中的内容到插件标准目录

● 动态加载插件类

● 调用插件init方法(以下对于AuditLoaderPlugin类而言)

○ 加载plugin.conf

○ 拉起LoadWorker线程

● EditLog记录PluginInfo

 

展示插件列表

核心在展示PluginMgr的plugins: Map<String, PluginLoader>[]属性

 

消息连结

审计消息注入 - AuditEventProcessor

● StreamLoadRecordMgr

● BulkLoadJob

● ConnectProcessor

此三处调用结束后将调用AuditEventProcessor.handleAuditEvent,将审计内容插入eventQueue队列

   public void handleAuditEvent(AuditEvent auditEvent) {
        try {
            eventQueue.add(auditEvent);
        } catch (Exception e) {
            LOG.warn("encounter exception when handle audit event, ignore", e);
        }
        }
 同时存在另一Worker内部线程,从队列中获取audit信息,并从PluginMgr中获取插件列表,遍历调用AuditPlugin.exec
    public class Worker implements Runnable {
        @Override
        public void run() {
            AuditEvent auditEvent;
            while (!isStopped) {
                auditEvent = eventQueue.poll(5, TimeUnit.SECONDS);

                for (Plugin plugin : auditPlugins) {
                    if (((AuditPlugin) plugin).eventFilter(auditEvent.type)) {
                        ((AuditPlugin) plugin).exec(auditEvent);
                    }
                }
            }
        }
    }
 

默认插件AuditLogBuilder

将AuditEvent转成字符串使用log4j写入日志文件

    public void exec(AuditEvent event) {
        try {
            switch (event.type) {
                case AFTER_QUERY:
                    auditQueryLog(event);
                    break;
                case LOAD_SUCCEED:
                    auditLoadLog(event);
                    break;
                case STREAM_LOAD_FINISH:
                    auditStreamLoadLog(event);
                    break;
                default:
                    break;
            }
        } catch (Exception e) {
            LOG.debug("failed to process audit event", e);
        }
    }
    
    private void auditQueryLog(AuditEvent event) throws IllegalAccessException {
        StringBuilder sb = new StringBuilder();
        Field[] fields = event.getClass().getFields();
        for (Field f : fields) {
            AuditField af = f.getAnnotation(AuditField.class);
            sb.append("|").append(af.value()).append("=").append(String.valueOf(f.get(event)));
        }

        String auditLog = sb.();
        AuditLog.getQueryAudit().log(auditLog);
    }    

 

标签:插件,plugin,源码,auditEvent,90,加载,event,AuditEvent
From: https://www.cnblogs.com/xutaoustc/p/17503739.html

相关文章

  • 【源码阅读】3. 建表
    |KW_CREATEopt_external:isExternalKW_TABLEopt_if_not_exists:ifNotExiststable_name:nameLPARENcolumn_definition_list:columnsCOMMAindex_definition_list:indexesRPARENopt_engine:engineNameopt_keys:keysopt_comment......
  • 【源码阅读】4. Stream Load 导入任务的执行流程
     FE起手路由在访问curl--location-trusted-uroot:-Ttest.csv-H"column_separator:,"http://127.0.0.1:8030/api/demo/example_tbl/_stream_load时,FE如下操作:● 检查用户名密码● 检查权限● 随机选择一个BE,Redirect到这个BE上 BE_stream_load的handler......
  • Bert Pytorch 源码分析:二、注意力层
    #注意力机制的具体模块#兼容单头和多头classAttention(nn.Module):"""Compute'ScaledDotProductAttention""" #QKV尺寸都是BS*ML*ES #(或者多头情况下是BS*HC*ML*HS,最后两维之外的维度不重要) #从输入计算QKV的过程可以统一处理,不必......
  • 【源码阅读】2. Catalog和Database
     Catalog创建|KW_CREATEKW_CATALOGopt_if_not_exists:ifNotExistsident:catalogNameopt_properties:properties{:RESULT=newCreateCatalogStmt(ifNotExists,catalogName,null,properties);:}|KW_CREATEKW_CATALOGopt_if_not_......
  • 【源码阅读】1. 配置、VARIABLE与用户PROPERTY
     配置初始化在FE启动时:● Config类ConfField注解标记的静态属性反射出Field存储到内存confFields,作为一个可读取和修改的属性列表(真正的值存储在Config类的静态属性中,反射出Field并存储到confFields只是一个读取和修改指针而已)● 读取配置文件,根据配置文件内容,设置Confi......
  • PS滤镜插件套装 Nik Collection 6 中文版下载
    NikCollection是由Google开发的一套Photoshop插件,包含了7个不同的插件,它们分别是:AnalogEfexPro:模拟胶片摄影风格,包含了多种特效和滤镜。ColorEfexPro:提供了超过50种颜色调整和增强工具,可以让你轻松地进行颜色校正、对比度调整等操作。SilverEfexPro:专门用于黑白照片处理......
  • Bert PyTorch 源码分析:一、嵌入层
    #标记嵌入就是最普通的嵌入层#接受单词ID输出单词向量#直接转发给了`nn.Embedding`classTokenEmbedding(nn.Embedding):def__init__(self,vocab_size,embed_size=512):super().__init__(vocab_size,embed_size,padding_idx=0) #片段嵌入实际上是......
  • ps插件Camera Raw新增功能让您的智能修图更简单~
    最新更新的ps2023.24.6中备受期待的AI填充功能真是强大到没朋友,今天介绍的“老伙计”插件也是热门选手——CameraRaw让您的智能修图更加锦上添花,今天来一起看看有哪些新功能吧~ Photoshop2023Macv24.6betaCameraRaw15formac(psRaw增效工具)中文版新功能如下:使用......
  • 谁与争锋!手机直播源码知识分享之主播PK功能
    今天我要分享的知识与PK有关,PK是指某些人分成几方进行对决、对抗,直到分出胜负。PK的方式有很多,在现实生活中,人们可以通过智力、力量等进行PK,方式可以是搏斗、扳手腕、现场智力问答等;而在网络中,人们可以通过游戏、网络智力问答的方式进行PK。我今天要讲的这个功能也是网络中的PK,这个......
  • 给自己的博客上添加个flash宠物插件
    前言最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的。 正文下面就简单介绍下如何在博客园的博客中添加这些可爱的flash动物插件。1.由于这些可爱的flash小宠物......