# ENTNGX所有文件codeview ## 背景与目标 1. 要求对所有功能性函数熟记于心,至少下次用的时候能想到 ## ENTNGX下的配置文件 1. **.gitignore** 文件,用于忽略文件的add . 2. .gitlab-ci.yml 文件,用于管理项目的runner任务 首先,before和afterscript都是空,这里不管 **variables**中定义了不少常量?变量。这里是ip变量的作用是,每个tag打上去后,会执行script,然后会curl 到每个ip服务上,启动唤醒,然后nginx -reload啥的(opent,opens) **stages**:定义阶段,后续每个job中就可以使用这些阶段 不同job中的相同stages是并行的,但各个阶段是顺序的(比如说这个tag,触发了多个job,这些job都会同时执行build_dev 都执行通过后,会同时执行下一阶段) **script** 这里Runner执行的命令或脚本,这里还没完全看懂 **only** 、**except** 这两个联系在一起,用于打tags行为与目标服务器的绑定。 only是,只有符合下面名称的tag名称,才会执行创建job(即执行这个job) 3. **.luacheckrc** 文件 暂时不清楚这个 作用可能是对lua 全局变量的控制,比如说忽略 4. **elk_log_handler.lua** 文件 用于将日志信息交接到Kibana,[!网址连接](http://log-kibana.office.qixin007.com/app/kibana#/discover/96a82b50-9dbf-11eb-954e-41b83028731f?_g=h@44136fa&_a=h@d74cfcc),(志东的账号),数据结构是契合的。 用户请求lua接口,均会进入log_by_lua_file 阶段,执行elk_log_handler.lua文件 ![image-20211019170336162](C:\Users\fengchun_yuan\AppData\Roaming\Typora\typora-user-images\image-20211019170336162.png) 然后再elk_log_handler.lua中把日志发到Kibana 用户请求有时候会返回406,而 elk 在遇见 非200 返回时会无法打印到 Kibana 上面去,用log_by_lua_file这个阶段,不会受到非200返回的影响,所以能将信息打印到Kibana 去 **ngx.is_subrequest** 这个字段是如何为true的?这个还不清楚 5. **elk_socket_obj.lua** [!rawget函数的使用](https://www.jianshu.com/p/78f0e050ddad) 大概作用是,区分table与元表中字段的值 6. **fastcgi_params** nginx自带的配置文件 7. **fastcgi.conf** nginx自带的配置文件 8. **init-by-lua.lua** lua执行阶段,初始化阶段,在此加载各种方法 9. **koi-utf,koi-win,mime.types,win-utf** nginx自带的 10. **netutil.lua** 这个方法没用过,大概是格式转换,暂时不深究 11. **nlog.lua** 包含所有nlog方法 12. **sit.conf ------ uat.conf ---------- prod.conf ** nginx的代理配置文件,不同环境的中间件配置server不同(xxx_middleware_server) ## backen_by_env文件夹 1. sit_middleware_backend.conf 2. uat_middleware_backend.conf 3. prod_middleware_backend.conf **负载均衡** ## route文件夹 各个接口模块的路由 **route_by_env文件夹** 主要是上海接口的中间件路由,区分sit,uat,prod环境 ## util、constant文件夹 包含各种功能性函数方法 ## config 中间件、ots、es的upstream **反向代理与正向代理的区别**:**正向代理**代理的对象是客户端,**反向代理**代理的对象是服务端 VPN,正向代理,用户通过代理上谷歌,谷歌不知道真实的用户是谁,隐藏的是客户端 lua,反向代理,用户请求dev服务器,经过upsteam,由多个服务提供服务器,用户不知道最终是哪个ip的服务器提供的服务,隐藏的是服务端 ## constants目录下的文件 1. area_const.lua 省市区的code—map,也可以反转,通过省市区来map-code(但是逻辑并没有完全完善) 2. area_ip_const.lua 是1的加强版,比较通用的区域码map方法area_ip_const.areaCode_map 3. bidding_const.lua 招投标 find_notice_type_func方法,用户输入code,返回notice_types列表 剩下的大多是一些字段map 4. ent_tags_const.lua 企业标签的tag_map,比如A股上市,国家技术创新中心,新三板啥的 包含desc字段(description),对map值的描述 ## util目录下的文件 1. **bidding_util.lua** 招投标的轮子,但并不通用 比较通用的方法是add_etype 和add_info,配合common_util.get_etype_by_eid_list使用 2. **common_util.lua** 通用方法 get_requests_args、get_request_id table的切片方法,merge方法,unique(去重),contains(table中是否有某个元素),table.sort(tb,function(a,b)) stiring_split方法 replace_string (替换,一一对应) common_util.deep_copy 深拷贝 获取字符串长度:string.get_string_length common_util.format_percent 有关百分比及保留小数(可以优化的) common_util.get_etype_by_eid_list 获取etype,返回已经聚合的结果 common_util.person_job_sort_map 人员职位排序map common_util.get_month_date 获取最近连续m个月的月份日期,还有每个月的第一天,最后一天(上下文) 随机数方法(随机取值),不知道作用 还有好多没用到的方法(有待优化),这里不作记录 3. **enterprise_panorama_util.lua** deal_start_year_func 处理成立年限,应该算是通用方法 deal_reg_capi_func 注册资本筛选,通用方法 deal_area_func 区域筛选 deal_domain_func 行业筛选 deal_distance_func 距离筛选 check_point 企业标签筛选 (创新情报的筛选搜索列表项有个类似的轮子) deal_status_func 经营状态筛选 format_finance_amount 融资金额格式化 4. **env_variate_util** 暂时不看 5. **es_util.lua** get_format_body_data 该方法对响应结果的状态码没有进行判断 6. **middleware_util.lua** get_format_body_data 该方法对响应结果有进行判断,status==1 get_format_body_data2 与上一方法的区别在于,不包含对status的判断,常用于上海接口 get_enterprise_info_by_condition 参考wiki中的使用说明 get_ent_other_count 参考wiki capture_multi 三个参数,params_arr, key_list, format_func params_arr 请求队列,table key_list 如果key_list不传,返回结果就是list,如果传key_list,那么 结果还是table,第一个元素 的key是 key_list[1],value是第一个请求的响应 format_func 是对结果的判断方法,默认判断方法是middleware_util.get_format_body_data ,即默认会对status判断,所有上海接口,不能用这个并发