├── DJISpying.jpeg ├── Fly Record.zip ├── README.md ├── Services ├── dji-service │ ├── utm.wiki │ │ └── utm-project.md │ └── utm │ │ └── README.md ├── djigo │ └── dji-mobile-logging │ │ └── doc │ │ └── source │ │ └── index.html.md └── ds │ ├── documents │ ├── FlightHub.pdf │ ├── FlightHub合作分工.docx │ ├── 大疆创新安全技术白皮书_初稿框架.docx │ ├── 大疆国内实名制项目v0.1.docx │ ├── 方案设计图.png │ ├── 无人机管控与侦测平台建设需求(初版).doc │ ├── 无人机管控与侦测平台技术方案(1.5).doc │ ├── 无人机身份认证方案v0.4.docx │ ├── 无人机身份认证方案v0.5.docx │ ├── 无人驾驶航空器安全管理数据库计划书.docx │ ├── 监管平台2017年Q1改造升级计划.txt │ ├── 监管平台系统设计报告.docx │ └── 监管项目域名与服务器.xlsx │ └── flying_mgr_portal │ └── src │ └── main │ └── java │ └── controller │ └── SearchFlyingRecordController.java ├── extract_json.py ├── flight_data.db.zip ├── pics ├── YOU.png ├── breakuserbox.png ├── breakuserbox_cn.png ├── consumers.png ├── consumers_cn.png ├── dailyflightstats.png ├── datacollection.png ├── earlydays.png ├── earlydays_cn.png ├── heatmap.png ├── logsearch.png ├── machinelearning.png ├── machinelearning_cn.png ├── ministry_of_information_security.png ├── ministry_of_information_security_cn.png └── userportrait.png ├── 大数据产业发展规划(2016-2020年).doc ├── 大数据产业发展规划(2016-2020年).pdf ├── 数据平台 - Data Platform ├── admin.wiki │ ├── data-platform.md │ ├── home.md │ └── requirement.md ├── 【数据平台】2016总结与规划.pptx ├── 【数据平台】eDM自助取数项目计划书.xlsx ├── 【数据平台】取数引擎项目计划书.xlsx ├── 【数据平台】安全设计报告(2016.10).docx ├── 【数据平台】平台迁移项目计划书.xlsx ├── 【数据平台】应用安全开发规范反馈(2016.12.23).xlsx ├── 【数据平台】数据门户项目计划书.xlsx ├── 【数据平台】机器学习项目计划书.xlsx ├── 【数据平台】第三方电商平台数据整合项目计划书.xlsx ├── 【数据平台】菜单分布图(2017.03).xlsx └── 用户画像单项指标分类 │ ├── activation_count.xlsx │ ├── dopms_buy_product_count.xlsx │ ├── dopms_order_count.xlsx │ ├── takeoff_stat.takeoff_city_count.xlsx │ ├── takeoff_stat.takeoff_count.xlsx │ └── takeoff_stat.takeoff_country_count.xlsx └── 舆情分析_规划讨论稿 - Public Opinion Analysis ├── 20160918-数据中心体系进度计划-201608版本.xlsx ├── dmp 相关数据源及报表服务.xmind ├── 会员营销规划v0.5_20160612.pptx ├── 全球代理IP库[测试部分].xlsx ├── 大疆舆情体系v0.5.xmind ├── 舆情.xmind ├── 舆情分析_规划讨论稿v1.0.pptx ├── 舆情分析_项目计划v1.0.xlsx └── 舆情项目计划v1.0.xlsx /DJISpying.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/DJISpying.jpeg -------------------------------------------------------------------------------- /Fly Record.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Fly Record.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sentiment & Data Mining by DJI 2 |

3 | 4 |

5 | Data gleaned from open AWS shares circa October 2017
6 | Update: full dump avaialble here - https://archive.org/details/DJI_1506456264_2017_09_26_9.3.5_gitlab_backup 7 | 8 | DJI Sentinel & Supervisor 用户画像 (User Portrait) 数据平台 (Data Platform) detail
9 | 10 | 舆情分析_规划讨论稿 (Public Opinion Analysis)
11 | 个人信息交叉匹配 (Personal information cross matching)
12 | 13 | xmind files can be read with Xmind - https://www.xmind.net/download/ 14 | 15 | "用户画像单项指标分类" (User Portrait Individual Index Classification) as described by Tencent
16 | https://cloud.tencent.com/developer/article/1134423
17 | https://translate.google.com/translate?hl=en&sl=zh-CN&u=https://cloud.tencent.com/developer/article/1134423&prev=search&pto=aue 18 | 19 |

20 | 21 |

22 |

23 | 24 |

25 |

26 | 27 |

28 |

29 | 30 |

31 |

32 | 33 |

34 |

35 | 36 |

37 |

38 | 39 |

40 |

41 | 42 |

43 |

44 | 45 |

46 |

47 | 48 |

49 |

50 | 51 |

52 |

53 | 54 |

55 |

56 | 57 |

58 |

59 | 60 |

61 |

62 | 63 |

64 |

65 | 66 |

67 | 68 | -------------------------------------------------------------------------------- /Services/dji-service/utm.wiki/utm-project.md: -------------------------------------------------------------------------------- 1 | [回首页](home) 2 | 3 | ## 基本状况 4 | 5 | + 周报内容:报告进展状态,是完成进度还是拖延,简单说明即可 6 | + 美国联系人:walter.stockwell@dji.com 7 | 8 | ## 周报一览 9 | 10 | ### 160801-160807 11 | 12 | UTM 项目本周因需求变更而重新置顶计划,本周已完成: 13 | 14 | 1. 和 Mingyu 汇报,确定一期任务 15 | 2. 和 DJI GO 团队沟通 16 | 3. 新的项目计划与需求文档 17 | 4. 技术调研与测试 18 | 19 | ### 160725-160731 20 | 21 | UTM 项目本周已完成进度: 22 | 23 | 1. 和美国同事Walter对接,确定防撞方案、数据收集范围和空域预留机制 24 | 2. 完成技术调研&测试,包括后端服务器框架、信息源获取、接口设计方案 25 | 3. 向mingyu汇报,制定短期内项目需求(两个功能:临近飞机/航线提醒、威胁天气提醒) 26 | 27 | ## 时间线 28 | 29 | ### 160803 和 DJI GO 对接 30 | 31 | 几个问题 32 | 33 | + 监管那边的数据上传是怎么做的,有没有具体的文档 34 | + 我们这边如何可以自己更改应用做测试版?主要涉及两个方面:地图绘制和即时通知 35 | + iOS 和安卓这边有技术问题可以问谁?监管那边是怎么合作的? 36 | + 数据上传部分问题,界面设计问题和谁对接 37 | 38 | ### 160801 向 Mingyu 汇报 39 | 40 | **项目计划大改** 41 | 42 | mingyu聊一下大方向,以免跑偏了后面需要花比较多时间。 43 | 44 | 和现在 utm 项目的异同,为什么需要重新设计 45 | 46 | utm 是我们第一次为全部用户提供了解周围情况,以及其他飞机,甚至是社交领域的基础,在上面可以有很多不一样的探索和尝试 47 | 48 | **从中学到的,理清核心需求,找出核心贡献点,太长远的且依赖别人的暂时看来虚无缥缈的需求不做,这一点很重要** 49 | 50 | #### 目标 51 | 52 | + 阶段目标:可实际测试运行的 UTM 系统 53 | + 意义:参与到欧美市场的发展趋势中,达到入场门槛,占据一席之地,拓宽受众群体 54 | 55 | #### 开发计划 56 | 57 | + 基础系统搭建(时间:2-3 周,8/19,产出:可运行的基础系统) 58 | + 虚拟机申请和配置、技术可行性测试(1周) 59 | + 后台服务器架构设计与搭建,数据流设计与处理(1-2周) 60 | + 基础功能(时间 4-6 周,9/30,产出:可以实地测试的 UTM 系统) 61 | + 数据传输:DJI GO 与服务端连接,数据双向传输测试(1周) 62 | + 飞行通知:分为两种,针对起飞用户和附近用户(1-2周) 63 | + 预留空域:暂时以通知的形式,例如当用户飞入已预留的空域则进行通知(1-2周) 64 | + 天气状况:雨、雪、雹、大风、雾(1周) 65 | + 飞机航线状况(1周) 66 | + 高级功能(时间 4-6 周,11/11,产出:带高级功能的 UTM 系统) 67 | + 数据分析统计:热点飞行地区,危险地区(1周) 68 | + 用户广播消息:商业用户、娱乐用户,结合 Facebook 等社交平台(1-2周) 69 | + 智能防撞:具体细则还需要跟 Walter 讨论(2-4周) 70 | 71 | 注:目前此项目的开发人员只有我一人,还需要承担一部分产品经理的职责,另外因为如故团队人员调整我还需要负责数据平台事宜,故各阶段可能会比计划中延迟 1-3 周 72 | 73 | #### 与现有监管项目的区别 74 | 75 | + 用户 76 | + 监管:政府或其他监管部门;用户量有限,平稳增长 77 | + 服务:所有 DJI 无人机用户 及 互联网用户;用户量较多,可能爆发增长 78 | + 目的 79 | + 监管:提供一种监管方式,推进立法 80 | + 服务:支持超视距飞行与智能辅助飞行 81 | + 意义 82 | + 监管:促进无人机产业的规范化,满足政府的监管需求 83 | + 服务:参与到欧美市场的发展趋势中,入场占位,拓宽受众群体 84 | + 方法 85 | + 监管:审批、流程、管理;半自动、应用 86 | + 服务:稳定、服务、社交;自动、服务 87 | + 模式 88 | + 监管:信息收集、管理;信息流聚合;无向外传播 89 | + 服务:基于地理位置的信息聚合;信息流发散; LBS 方式、社交网络方式 90 | + 地区 91 | + 监管:国内 92 | + 服务:美国、欧洲 93 | 94 | #### 未来方向 95 | 96 | + 无人机社交的尝试,和 Facebook 连接,走 Nike Running Plus 路线,可以在 Facebook/Twitter 发送状态(包含路线、主体、图片等各类信息),别人可以点赞关注和评论欢呼等 97 | + 超视距飞行的基础技术支持,更高级的环境感知 98 | + NASA UTM 系统的接入 99 | + 多机集群协同飞行的支持,表演性质的固定线路飞行支持 100 | 101 | #### 需求 102 | 103 | + 开发人员 104 | + 测试用无飞机:用于数据传输测试与实地飞行测试 105 | + 测试版 DJI GO 程序:用于技术可行性测试、数据传输测试与实地飞行测试 106 | 107 | ### 160721 Andrew 开会 108 | 109 | + 决定重新设计系统,根据需求来 break down 110 | + 走 mobile sdk 系统的工作流程,脚本部署,统一登录与帐号管理,很先进(这个要具体说一下) OneLogin,包含具体的帐号和配置 111 | + node.js 112 | + Amazon IoT 服务 113 | + ansible 114 | + terraform 115 | + 有自动部署的脚本 116 | + Amazon Lambda 117 | + Elastic Search 118 | + Blue / Green 发布 119 | + Amazon Kinesis 120 | + Amazon Container 121 | + ELK, Elasticsearch, Logstash, Kibana 122 | + grpc.io 123 | + Jenkins 124 | + Dev, Staging, Product 125 | + 基于 mobile SDK 自己开发 126 | + Springboot 和 websocket 会有问题 127 | 128 | ### 160718 更新 129 | 130 | + 代码无文档、无单元测试,通过 jar 包部署,没有持续集成 131 | + 无人机上传数据的格式,绘图与通知稍后我与 DJI GO 对接 132 | + 代码 Host 在我们的 gitlab 133 | + 机器由我们这边申请 134 | + 初步构想:Jenkins+Gradle+gitlab 自动构建发布,spring boot 135 | + Andrew 部分的数据上传代码 136 | 137 | 让 Walter 跟 mingyu 说该项目和 onboard sdk 不冲突,可以安排人(Andrew)来做 138 | 139 | 代码能跑起来了 140 | 141 | 后面加入数据分析的东西,Spark Streaming 142 | 143 | 快立项了申请招人 144 | 145 | 146 | ### 160712 邮件回复 147 | 148 | + 立项相关翻译与事宜,邮件同意,等等 149 | + 目前我们只能用自己制造的数据来进行测试,美国那边收集信息和测试的可能性 150 | + 应该很快会收到代码访问的权限(只读) 151 | + list of actions 可以应用于目前系统 152 | + DJI GO 具体的测试方式,能否有测试版 153 | + 会部署另一套在美国的系统 154 | + Weekly meeting call 时间 155 | + Confluence is better 156 | + 如何看待 google 和 amazon 提出的 proposal 157 | 158 | Purpose: Deploy a UTM system as part of DJI GO in NA and EU to help our drones to know more about the environment to make flights safer and more convenient. 159 | 160 | Abstract: 161 | 162 | 1. For User: The UTM system will be combined with DJI GO, providing the features of data uploading, message notification and environment sensing. 163 | 2. For Management: Different types of administrators can set up NFZ(no flying zone) or notify nearby drones' pilots 164 | 3. Provide importing and exporting solution for 3rd party application or other UTM system. 165 | 166 | Plan: 167 | 168 | 1. Explore the possibility of UTM system in promoting safety and efficiency for drones 169 | 2. Build the system based on requirements and coop with other system in order to make full use of resources 170 | 3. Define protocol and standard along with other information sources and UTM system. 171 | 172 | ### 160708 团队会议 173 | 174 | + 基本组件 175 | + 【厂方】适航系统 176 | + 【监管方】飞机注册系统:身份绑定 177 | + 【监管方】公安局对接 APP 178 | + 相关问题 179 | + 给谁做,Demo 还是产品 180 | + 确定需求 181 | + 客户端开发与展示,geofencing 182 | + 拉上 Branden 一起聊一次 183 | + 交互哪边出 184 | 185 | ### 160708 与美国团队会议要点 186 | 187 | + 项目正式成立,下午丁准去要项目编号 188 | + Walter 是 leader,Andrew 是 Tech leader 189 | + 不仅仅要考虑美国、欧洲,还有其他地区,本地化 190 | + 沟通机制建立,开发方式,需求讨论 191 | + 下午两点沟通 192 | 193 | ### 160630 与 Branden 沟通 194 | 195 | 拨打美国电话 9001 + 美国电话,比如 9001 202 826 3111 电话是真的 196 | 197 | > UTM 这个项目怎么看,价值所在 198 | 199 | 有很大的价值,在安全上有很大提升。FAA 最近的趋势是无人飞行器要在视距范围内飞行,这样才能保证安全,不然一旦超过视距,就没有办法避免碰撞。而 UTM 项目可以突破这个限制,即使在用户视距之外,也可以通过手机屏幕了解周围情况(环境感知),来避免碰撞。 200 | 201 | > 和 Geo Fencing 项目是否冲突 202 | 203 | 不冲突,是很好的互为补充,可以统一通过 DJI GO 来展示给用户,比方说禁飞区,或者诸如火灾、球赛等涉及『动态交通流量』管制的信息,但具体还有一些技术问题需要解决。 204 | 205 | > 如何做,具体的时间安排 206 | 207 | 以为简单的事情可能很难(显示多边形地图,目前由于飞控的计算能力问题以圆形为主),以为很难的问题可能很简单。要考虑具体展示什么给用户。 208 | 209 | 最重要的信息是获取民航飞机、直升飞机、热气球等载人飞行器的飞行信息,避免无人机和它们相撞。这部分工作可能比较复杂,在不同的国家和地区需要不同的对接方式 210 | 211 | > Walter, Darren 是否需要参与,扮演什么角色 212 | 213 | 背景:以 NASA 牵头,联合许多美国科技公司(尤其是 Amazon,因为要使用无人机送货)在做一套与我们设想类似但不太一样的 UTM 系统(根据美国法律规定只有美国公司可以参与和 NASA 的合作研究),但更多主要的是涉及受控飞行,类似于航空航线系统的无人机版,给不同的无人机设定好不同的路线避免碰撞(这里我们针对个人飞行行为,有比较大的不同)。这里可以考虑换个代号,不然以后推广很容易造成误解。 214 | 215 | Walter 对于 NASA UTM 有很深的了解,我们可以从他身上了解 NASA UTM 的相关技术标准和动态,从中参考借鉴 216 | 217 | #### 给 Walter 的话 218 | 219 | Hi Walter, 220 | 221 | John and I had a conversation with Branden and he said this UTM project is good and worth developing. I've sent Mingyu a email about it. We can find some time to have further discussion about our DJI UTM project. 222 | 223 | Besides, Branden told us that you are quite familiar with the NASA UTM project. We really like to have more information about it from you. But before that, you can talk to Mingyu about this UTM project and make it a real project. We think you can lead the project and we can give you support on building the system. 224 | 225 | #### 杂项 226 | 227 | + Branden 可能在 9 月份会来深圳,可以当面沟通 228 | + 跟 Walter 发消息,要他跟 mingyu 说一下,沟通一下接下来的安排 229 | + 跟 hank,mingyu,fiona,john,pillar 发邮件 230 | 231 | 232 | ### 160623 会议准备 233 | 234 | Unmanned Traffic Management System(UTMS) 235 | 236 | #### Target 237 | 238 | 1. 摸底 239 | 2. 功能(原型,API) 240 | 3. 合作方式(我们这边来主导?) 241 | 242 | + we should define the concept -> UTMS -> standard -> laws 243 | + define protocol 244 | + should not use the word 'tracking' as it's related to some privacy issue. 245 | + focus on traffic(whole thing), not tracking(more personal). the focusing points are different 246 | 247 | #### Overview 248 | 249 | + China UTM project. Testing by ourself in hainan province(plan) 250 | + collect data from other sources 251 | + connect to other UTMS for drone such as package delivery plan from Amazon 252 | + cloud platform - realtime traffic, weather, other info about safer operation 253 | + Mobile app - send, location, altitude, speed, other info about telemetry, in real time 254 | 255 | #### Feature 256 | 257 | + Nearby DJI UAS Operations Warning, popular flying area, anonymized telemetry 258 | + With other extended features 259 | + Real-time ID - share data 260 | 261 | #### Plan 262 | 263 | 1. staffing, backend engineering team(US), android app -> their progress, what's the team. 264 | 2. integrated with DJIGO app and backend -> we'd like to make the UTMs system independent and provide apis to DJIGO 265 | 266 | #### Questions 267 | 268 | + prototype status, how they use mobile SDK? displaying? 269 | + tech stack 270 | + drone -> phone -> server, how to upload? 271 | + detailed plan for the UTMS 272 | + admin interface needed?monitor the conditions 273 | + DJIGO app 和 SDK app 的共性 274 | + Web Client 和 ID Client 是什么 275 | + ADS-B range, the protocol in sending the data 276 | 277 | #### People 278 | 279 | + Backend, 3 FTE(US), architecture, infrastructure, coding, testing, operations 280 | + DJIGO app, 2 PTE for the functions in the app. join US mobile SDK team? 这里有个疑问,darren 和 sdk 那哥们儿是一派的? 281 | + Product, 1 PTE product management, fully specified features, mocks, functionalities 282 | + Project, 1 PTE project management, coordinate 283 | + Marketing, 1 PTE marketing 284 | 285 | 每个人是干嘛的 286 | 287 | + Andrew: 硅谷工程师 288 | + 秉臻: 软件部的 pm,DJI GO 289 | + Darren: 美国那边弄 UTM 标准的,没啥进展 290 | + Walter: 硅谷那边的头 291 | -------------------------------------------------------------------------------- /Services/dji-service/utm/README.md: -------------------------------------------------------------------------------- 1 | # US UTM 开发相关 2 | 3 | ## 阅读指引 4 | 5 | 本文档会依次介绍数据平台开发相关的知识,依据功能的不同分为不同的板块。先介绍总体架构,然后是按照数据流的顺序进行介绍。 6 | 7 | 8 | 9 | ## 基本信息 10 | 11 | ### 技术栈 12 | 13 | + Go 1.7 14 | + Beego 1.7.0 15 | + Redis 3.2 16 | + MySQL 17 | + Nginx 18 | 19 | ### 架构 20 | 21 | ![](media/14758919345487.jpg) 22 | 23 | 服务器目前只有一台 usutm01,都是在本机运行。 24 | 25 | + 利用 Redis 的 Geo 功能来保存位置及相关计算,用 name 作为飞机详细信息的 key 26 | + 连接池,不必担心数据一致性的维护 27 | 28 | 一条飞行记录到来 29 | 30 | + 对应 Redis 记录两条 31 | + GEOADD location lat long name (这里 name 是 droneid) - 首先需要从 set 中移除这个 name 对应的记录 32 | + 添加或更新 key(即上面的 name) 和 value(就是该条飞行记录的详细信息) - 包含过期时间 33 | + Redis 需要定期清理死键 34 | + 考虑走 Kafka 进行流处理,也可以是一个备份 35 | 36 | 历史数据保存在 MySQL 中,一个月以上的,按天保存到 S3 中,线上的数据使用 Redis 保存 37 | 38 | ## 开发相关 39 | 40 | ### 任务列表 41 | 42 | + S3 保存历史记录 43 | + 监控功能 44 | + Top 10 List 45 | + 利用 Redis 做 Bloomfilter 46 | + Last Index 用户最近访问记录,lpush, lpop 47 | + Fast Transaction with Lua, 小的更新逻辑 48 | + 监控 Redis 可以用 hypnos/redisLive 49 | + 考虑用位进行统计,bit 操作 50 | + 模拟器部分 51 | 52 | ### 部署 53 | 54 | + 跳板机帐号:usutm-staging 55 | + 密码:ag&cEqj1dy+W5O*bTof_S-xj 56 | + 主机名:sstg-usa-utm01(52.44.34.230; 10.1.1.21) 57 | 58 | 执行脚本 `ubuntu_install.sh` 59 | 60 | 修改权限 `sudo chmod 777 *` 61 | 62 | 安装 rz 工具上传 `sudo apt install lrzsz` 63 | 64 | 部署的时候只要把编译好的应用放到服务器上后台执行即可 65 | 66 | 环境配置使用 67 | 68 | + `ubuntu-nginx-install.sh` 69 | + `ubuntu-redis-install.sh` 70 | 71 | ### 本地测试 72 | 73 | + 进入 `$GOPATH/src/utm-server/` 运行 `bee run -gendoc=true -downdoc=true` 74 | + 测试数据库 `mysql -uroot -pAyQnuWucFNX2EtKK -h121.43.181.146 -P20097` 75 | + 公司的 iMac 中的 Ubuntu 虚拟机,密码 11223345 76 | 77 | 78 | ## 技术点 79 | 80 | 81 | 82 | ### 客户端 83 | 84 | + 确定要发送的信息 85 | + 确定如何匿名表示身份 - uuid 或其他加密算法 86 | + 地图展示测试(Objective-C 需要了解细节) 87 | + mobile SDK 88 | + 传输加密(HTTPS, TCP 加密,如何防止数据伪造) 89 | + 传输格式 90 | + WebSocket 91 | + 方便集成到 DJI GO 中 92 | + 与 Geo fencing 和 NFZ 协调(比方说在这两个区域中,不能进行空域预留) 93 | + 用户可以选择是否加入,可以随时退出(需要一个开关来切换) 94 | + opt-in means to choose to be involved in or part of the scheme 95 | + 用户需要联网,联网检测 96 | + 通知用户 97 | 98 | ### 服务器端 99 | 100 | 尽量不要太依赖 AWS,尤其是后端部分 101 | 102 | + 负载均衡 103 | + AWS ELB 104 | + 容器 105 | + AWS EC2 + Docker 106 | + 分布式集群管理 107 | + AWS Autoscaling + Ansible 108 | + 日志及数据备份存储 109 | + Amazon S3 110 | + 缓存 前期可以暂时不用,直连数据库或者自己用 EC2 搭建 Redis 111 | + Amazon ElastiCache 112 | + 安全性 113 | + VPC 隔离 114 | + 数据生成器 115 | + 消息队列 116 | + Kafka(方便后期与机器学习集群绑定,日志 ELK 也可以走这一套) 117 | + 数据库 118 | + MongoDB 119 | + 框架 120 | + 子服务 解耦 121 | + 空域检索服务(附近无人机,~~包含广播~~的消息) 122 | + (砍掉)~~空域规划服务(预留空域)~~ 123 | + 天气情况服务(附近天气) 124 | + (砍掉)~~数据统计服务(飞行热点、飞行危险度)~~ 125 | + 数据验证服务(每个飞机的匿名 id 以及传输加解密) 126 | + 虚拟机监控 127 | 128 | 国内部署考虑:阿里云的 SDK 限制 129 | 130 | 131 | ## 归档 132 | 133 | ### 术语 134 | 135 | + **智能辅助飞行**:指的是在联网条件下,通过后端服务器获取无人机周边的各类信息,增加环境感知能力,包含智能避障 136 | + **超视距飞行**:指人肉眼无法看到无人机主体,仅能通过已连接设备的屏幕来判断无人机位置的飞行,需要考虑图传因各种问题信号不稳定甚至失效的问题 137 | + **NASA UTM**:有 NASA 牵头的总 UTM 系统,各个公司的 UTM 系统最终都需要接入到此系统中 138 | 139 | ### 老开发计划 140 | 141 | 已失效 142 | 143 | + 基础系统搭建(时间:2-3 周,8/19,产出:可运行的基础系统) 144 | + 虚拟机申请和配置、技术可行性测试(1周) 145 | + 后台服务器架构设计与搭建,数据流设计与处理(1-2周) 146 | + 基础功能(时间 4-6 周,9/30,产出:可以实地测试的 UTM 系统) 147 | + 数据传输:DJI GO 与服务端连接,数据双向传输测试(1周) 148 | + 飞行通知:分为两种,针对起飞用户和附近用户(1-2周) 149 | + 预留空域:暂时以通知的形式,例如当用户飞入已预留的空域则进行通知(1-2周) 150 | + 天气状况:雨、雪、雹、大风、雾(1周) 151 | + 飞机航线状况(1周) 152 | + 高级功能(时间 4-6 周,11/11,产出:带高级功能的 UTM 系统) 153 | + 数据分析统计:热点飞行地区,危险地区(1周) 154 | + 用户广播消息:商业用户、娱乐用户,结合 Facebook 等社交平台(1-2周) 155 | + 智能防撞:具体细则还需要跟 Walter 讨论(2-4周) 156 | 157 | 注:目前此项目的开发人员只有我一人,还需要承担一部分产品经理的职责,另外因为如故团队人员调整我还需要负责数据平台事宜,故各阶段可能会比计划中延迟 1-3 周 158 | 159 | -------------------------------------------------------------------------------- /Services/djigo/dji-mobile-logging/doc/source/index.html.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dji mobile日志收集API 3 | 4 | language_tabs: 5 | - ruby 6 | - Objective-C 7 | - Java 8 | 9 | toc_footers: 10 | - 可视化报表 11 | - 问题与建议 12 | 13 | 14 | search: true 15 | --- 16 | 17 | # Introduction 18 | 19 | 这是一个简单实用的日志收集系统, 支持两种上传方式: 20 | 21 | 1. 使用http post表单 22 | 2. 上传日志文件 23 | 24 | 传输数据格式使用 [msgpack](http://msgpack.org), 原因是: 25 | 26 | * 目前报表需求不是特别明确,使用可以任意定义key的序列化格式更加符合实际。当整个系统和业务需求更加明确以后,可以考虑效率更高的Avro、Protobuf。 27 | * 相对于同样规则自由的JSON, msgpack格式序列化之后数据更小,传输效率更高。 28 | * 支持的语言多, 使用简单。 29 | 30 | 目前系统运行在测试环境中,地址:120.27.228.232 31 | 32 | 33 | # 使用HTTP Post表单 34 | 35 | ## HTTP Request 36 | `POST http://host/api/v1/log` 37 | 38 | ### 用Token识别APP 39 | 在HTTP header利用关键字: 40 | `dji_app_token` 41 | 标识当前发送日志的app名称和客户端,比如,我们可以使用唯一的token表明这是Dji Go的安卓客户端。 42 | 43 | 44 | > 将序列化后的数据post到这个API,可以发送单个或者多个事件 45 | 46 | ```ruby 47 | require 'rest-client' 48 | require 'msgpack' 49 | 50 | header = {dji_app_token: "token_for_your_app_and_client" 51 | content-type: "application/x-msgpack"} 52 | # 发送单个事件 53 | RestClient.post('http://#{host}/api/log', MessagePack.pack({k:"v"}), header) 54 | 55 | # 使用数组发送多个事件 56 | RestClient.post('http://#{host}/api/log', 57 | MessagePack.pack([{k1:"v1", k2:"v2"}, {k3:"v3", k4:"v4"}]), 58 | header) 59 | ``` 60 | 61 | > 这段代码会发送一个单事件和一个批量事件 62 | 63 | ```json 64 | { 65 | "k":"v" 66 | } 67 | 和 68 | [ 69 | { 70 | "k1":"v1", 71 | "k2":"v2" 72 | }, 73 | { 74 | "k3":"v3", 75 | "k4":"v4" 76 | } 77 | ] 78 | ``` 79 | 82 | 83 | 84 | # 使用Log文件上传 85 | 86 | ## HTTP Request 87 | `POST http://host/api/v1/upload` 88 | ### 用Token识别APP 89 | 在HTTP header利用关键字: 90 | `dji_app_token` 91 | 标识当前发送日志的app名称和客户端,比如,我们可以使用唯一的token表明这是Dji Go的安卓客户端。 92 | 93 | > 如果日志数据比较大,可以通过上传文件的方式发送 94 | 95 | ```ruby 96 | require 'rest-client' 97 | require 'msgpack' 98 | 99 | # 写文件的过程,注意多个纪录之间不需要换行符 100 | filename = 'logfile' 101 | File.open(filename, "a+") do |f| 102 | f.write(MessagePack.pack({k:"v"})) 103 | f.write(MessagePack.pack([{k1:"v1", k2:"v2"}, {k3:"v3", k4:"v4"}])) 104 | end 105 | 106 | # 真正发送上传文件请求 107 | header = {dji_app_token: "token_for_your_app_and_client", 108 | content-type: "application/x-msgpack"} 109 | RestClient.post('http://#{host}:4567/api/upload', log: File.new(filename), header) 110 | ``` 111 | 112 | > 这段代码会把一个单事件和一个批量事件写入文件中,然后上传 113 | 114 | ```json 115 | { 116 | "k":"v" 117 | } 118 | 和 119 | [ 120 | { 121 | "k1":"v1", 122 | "k2":"v2" 123 | }, 124 | { 125 | "k3":"v3", 126 | "k4":"v4" 127 | } 128 | ] 129 | ``` 130 | 131 | 134 | 135 | # Log上传之后 136 | 137 | ## ELK服务 138 | 日志数据会保存在[Elasticsearch](https://www.elastic.co/)中,自动建立索引,并且通过[Kibana](https://www.elastic.co/products/kibana)能够进行可视化的关键字搜索和报表生成。 139 | 140 | ![可视化](images/kibana.png) 141 | 142 | 145 | 146 | ## AWS s3 147 | 日志会定期归档到AWS s3里, 目标是保留所有用户的数据。 148 | -------------------------------------------------------------------------------- /Services/ds/documents/FlightHub.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/FlightHub.pdf -------------------------------------------------------------------------------- /Services/ds/documents/FlightHub合作分工.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/FlightHub合作分工.docx -------------------------------------------------------------------------------- /Services/ds/documents/大疆创新安全技术白皮书_初稿框架.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/大疆创新安全技术白皮书_初稿框架.docx -------------------------------------------------------------------------------- /Services/ds/documents/大疆国内实名制项目v0.1.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/大疆国内实名制项目v0.1.docx -------------------------------------------------------------------------------- /Services/ds/documents/方案设计图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/方案设计图.png -------------------------------------------------------------------------------- /Services/ds/documents/无人机管控与侦测平台建设需求(初版).doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机管控与侦测平台建设需求(初版).doc -------------------------------------------------------------------------------- /Services/ds/documents/无人机管控与侦测平台技术方案(1.5).doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机管控与侦测平台技术方案(1.5).doc -------------------------------------------------------------------------------- /Services/ds/documents/无人机身份认证方案v0.4.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机身份认证方案v0.4.docx -------------------------------------------------------------------------------- /Services/ds/documents/无人机身份认证方案v0.5.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人机身份认证方案v0.5.docx -------------------------------------------------------------------------------- /Services/ds/documents/无人驾驶航空器安全管理数据库计划书.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/无人驾驶航空器安全管理数据库计划书.docx -------------------------------------------------------------------------------- /Services/ds/documents/监管平台2017年Q1改造升级计划.txt: -------------------------------------------------------------------------------- 1 | 监管平台2017年Q1改造升级计划 2 | 3.6-3.10 3 | ① 上报与管理后台分拆,保证上报数据不丢失 4 | ② 生产服务增加newrelic统计,对服务进行监控 5 | ③ 增加websocket连接统计,统计账号连接数、连接ip 6 | ④ 管理后台filter增加接口使用记录 7 | ⑤ 增加短信发送和邮件发送异步处理,邮件服务使用http替换smtp 8 | ⑥ 统一分支,严格使用master作为生产分支,develop作为测试分支 9 | ⑦ 登录态使用数据库同步,当服务器缓存查不到的时候去数据库查询 10 | ⑧ 清理账号,提供权限清单 11 | ⑨ 解决地图坐标偏移、增加小工具 12 | 13 | 14 | 3.13-3.17 15 | ① 迁移原node程序处理的业务逻辑(胡强、添兴) 16 | ② 增加所有管理接口的后台权限验证(仲贤) 17 | ③ 统计报表summary改为按月分表(仲贤) 18 | 19 | 3.20-3.24 20 | 21 | ③ 修改服务为单点登录,和鉴权同时修改(仲贤) 22 | ② 升级修改websocket通信协议,增强通信安全性 23 | ③ 集中优化各处明显的性能问题 24 | ④ 完善所有接口的注释 25 | 26 | 3.27-3.31 27 | 预留一周补充可能插入的紧急需求或延期任务 28 | 29 | 系统功能性 30 | 1、前后端接口迁移(禁飞区管理、 操作记录、 ) 31 | 2、分布式服务,多点部署后的websocket连接,给指定用户发消息 32 | 3、增加统一到导出历史飞行记录功能, 与建哥那边数据统一 33 | 4、微服务改造:上报服务,后台管理服务,第三方接口服务 34 | 5、考虑未来的监听设备管理功能,提供更好的架构和数据表结构。将客户端上报的数据接口与监听设备的上报接口分离开来,分开处理。 35 | (很多种类的监听设备上报数据, 考虑app和监听设备的远程自动强制更新) 36 | 37 | 系统性能,稳定性等方面 38 | 1、 查询历史飞行记录(按月分表、 建立索引、)大量数据后的处理 39 | 2、 新增功能,写测试代码,提高系统的可靠性。 40 | 3、 newRelic性能监控,相比人工排查,能较为快速找到性能瓶颈 41 | 4、 日志处理分析,统计。 42 | 43 | 规范性 44 | 1、代码注释规范。 45 | 2、正式环境和测试环境分支,发包规范。 46 | 3、接口文档的规范性,一切皆有文档,需求也需要 47 | 4、日志的统一log4j, 生产环境不用打印一些info信息。 -------------------------------------------------------------------------------- /Services/ds/documents/监管平台系统设计报告.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/监管平台系统设计报告.docx -------------------------------------------------------------------------------- /Services/ds/documents/监管项目域名与服务器.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/Services/ds/documents/监管项目域名与服务器.xlsx -------------------------------------------------------------------------------- /Services/ds/flying_mgr_portal/src/main/java/controller/SearchFlyingRecordController.java: -------------------------------------------------------------------------------- 1 | package controller; 2 | 3 | 4 | import model.AppModel; 5 | import model.SearchFlyingRecordModel; 6 | import org.json.JSONObject; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.web.bind.annotation.*; 9 | import util.ResponseTemplate; 10 | 11 | /* 12 | * @Description: 获取历史飞行记录, 供数据平台调用 13 | * @Author hanks.hu 14 | * @Date 17/3/29 15 | */ 16 | @RestController 17 | @RequestMapping(produces = { MediaType.APPLICATION_JSON_UTF8_VALUE }) 18 | public class SearchFlyingRecordController { 19 | 20 | /** 21 | * 查询符合条件的历史飞行记录的总数目 22 | * 23 | * @controller /api/flyingRecord/history/total 24 | * @method POST 25 | * @contentType application/x-www-form-urlencoded 26 | * @header appID-string-required-appID 27 | * @header secret-string-required-消息体签名 28 | * @param orderID-string-optional-飞行编号 29 | * @param droneID-string-optional-飞机sn 30 | * @param pilot-string-optional-驾驶员skypixel账号名 31 | * @param contact-string-optional-驾驶员skypixel填写的联系方式 32 | * @param address-string-optional-起飞地点 33 | * @param latitude-string-optional-起飞地点纬度 34 | * @param longitude-string-optional-起飞地点经度 35 | * @param radius-string-optional-区域范围大小(m) 36 | * @param droneType-string-optional-飞机型号 37 | * @param beginDate-string-optional-开始时间(格式: 2016-12-12 12:12) 38 | * @param endDate-string-optional-结束时间(格式: 2016-12-12 12:12) 39 | * @param minDuration-number-optional-最短飞行时长(s) 40 | * @param maxDuration-number-optional-最长飞行时长(s) 41 | * @param minPeakHeight-number-optional-最低的最高点飞行高度(m) 42 | * @param maxPeakHeight-number-optional-最高的最高点飞行高度(m) 43 | * @param illegal-boolean-optional-违规情况(默认全部, true: 违规, false: 不违规) 44 | * @return 45 | */ 46 | @RequestMapping(path = "/api/flyingRecord/history/total", method = RequestMethod.POST) 47 | @ResponseBody 48 | public String handleGetHistoryTotal(@RequestHeader(name = "appID") String appIDStr, @RequestHeader(name = "secret") String secret, @RequestBody(required = false) String reqBody, 49 | String orderID, String droneID, String pilot, String contact, String address, String latitude, String longitude, String radius, String droneType, 50 | String beginDate, String endDate, Double minDuration, Double maxDuration, Double minPeakHeight, Double maxPeakHeight, Boolean illegal) { 51 | 52 | Integer appID = Integer.parseInt(appIDStr); 53 | if (!AppModel.isLegalData(appID, reqBody, secret)) { 54 | return ResponseTemplate.invalidToken(); 55 | } 56 | 57 | JSONObject ret = SearchFlyingRecordModel.getHistoryTotal(orderID, droneID, pilot, contact, address, latitude, longitude, radius, droneType, beginDate, endDate, minDuration, 58 | maxDuration, minPeakHeight, maxPeakHeight, illegal); 59 | return ResponseTemplate.responseTemplateJSON(ret); 60 | } 61 | 62 | 63 | /** 64 | * 查询符合条件的历史飞行记录 65 | * 66 | * @controller /api/flyingRecord/history 67 | * @method POST 68 | * @contentType application/x-www-form-urlencoded 69 | * @header appID-string-required-appID 70 | * @header secret-string-required-消息体签名 71 | * @param pagination-integer-optional-页码(默认首页) 72 | * @param orderID-string-optional-飞行编号 73 | * @param droneID-string-optional-飞机sn 74 | * @param pilot-string-optional-驾驶员skypixel账号名 75 | * @param contact-string-optional-驾驶员skypixel填写的联系方式 76 | * @param address-string-optional-起飞地点 77 | * @param latitude-string-optional-起飞地点纬度 78 | * @param longitude-string-optional-起飞地点经度 79 | * @param radius-string-optional-区域范围大小(m) 80 | * @param droneType-string-optional-飞机型号 81 | * @param beginDate-string-optional-开始时间(格式: 2016-12-12 12:12) 82 | * @param endDate-string-optional-结束时间(格式: 2016-12-12 12:12) 83 | * @param minDuration-number-optional-最短飞行时长(s) 84 | * @param maxDuration-number-optional-最长飞行时长(s) 85 | * @param minPeakHeight-number-optional-最低的最高点飞行高度(m) 86 | * @param maxPeakHeight-number-optional-最高的最高点飞行高度(m) 87 | * @param illegal-boolean-optional-违规情况(默认 全部, true: 违规, false: 不违规) 88 | * @return 89 | */ 90 | @RequestMapping(path = "/api/flyingRecord/history", method = RequestMethod.POST) 91 | @ResponseBody 92 | public String handleGetHistory(@RequestHeader(name = "appID") String appIDStr, @RequestHeader(name = "secret") String secret, @RequestBody(required = false) String reqBody, 93 | Integer pagination, String orderID, String droneID, String pilot, String contact, String address, String latitude, String longitude, String radius, String droneType, 94 | String beginDate, String endDate, Double minDuration, Double maxDuration, Double minPeakHeight, Double maxPeakHeight, Boolean illegal) { 95 | 96 | Integer appID = Integer.parseInt(appIDStr); 97 | if (!AppModel.isLegalData(appID, reqBody, secret)) { 98 | return ResponseTemplate.invalidToken(); 99 | } 100 | 101 | JSONObject ret = SearchFlyingRecordModel.getHistory(pagination, orderID, droneID, pilot, contact, address, latitude, longitude, radius, droneType, beginDate, endDate, 102 | minDuration, maxDuration, minPeakHeight, maxPeakHeight, illegal); 103 | return ResponseTemplate.responseTemplateJSON(ret); 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /extract_json.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | import pandas as pd 3 | import os 4 | import json 5 | 6 | # Create an SQLite Database and Define Schema 7 | def create_database(db_path): 8 | conn = sqlite3.connect(db_path) 9 | cursor = conn.cursor() 10 | 11 | # Create table for JSON data with added aircraftName column 12 | cursor.execute(''' 13 | CREATE TABLE IF NOT EXISTS json_records ( 14 | id INTEGER PRIMARY KEY AUTOINCREMENT, 15 | file_path TEXT, 16 | version INTEGER, 17 | aircraftName TEXT, 18 | subStreet TEXT, 19 | street TEXT, 20 | city TEXT, 21 | area TEXT, 22 | latitude REAL, 23 | longitude REAL 24 | ) 25 | ''') 26 | 27 | # Create table for CSV data 28 | cursor.execute(''' 29 | CREATE TABLE IF NOT EXISTS csv_locations ( 30 | id INTEGER PRIMARY KEY, 31 | Name TEXT, 32 | id_sub TEXT, 33 | Town TEXT, 34 | Prefecture TEXT, 35 | lat REAL, 36 | long REAL, 37 | facility_type TEXT, 38 | corroboration_level TEXT, 39 | ETNAM TEXT, 40 | Shawn_Zhang_list TEXT, 41 | Shawn_Zhang_num INTEGER, 42 | ASPI_2020_num INTEGER, 43 | XJVDB TEXT, 44 | Media_reports TEXT, 45 | Researchers TEXT, 46 | Links TEXT, 47 | Links_2 TEXT, 48 | Links_3 TEXT, 49 | Links_4 TEXT 50 | ) 51 | ''') 52 | 53 | conn.close() 54 | 55 | # Process JSON File and Insert Data into SQLite Database 56 | def process_json_file(json_path, db_path): 57 | conn = sqlite3.connect(db_path) 58 | cursor = conn.cursor() 59 | 60 | try: 61 | with open(json_path, 'r') as file: 62 | data = json.load(file) 63 | version = data.get('version') 64 | info = data.get('info', {}) 65 | aircraft_name = info.get('aircraftName') 66 | subStreet = info.get('subStreet') 67 | street = info.get('street') 68 | city = info.get('city') 69 | area = info.get('area') 70 | latitude = info.get('latitude') 71 | longitude = info.get('longitude') 72 | 73 | cursor.execute(''' 74 | INSERT INTO json_records (file_path, version, aircraftName, subStreet, street, city, area, latitude, longitude) 75 | VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) 76 | ''', (json_path, version, aircraft_name, subStreet, street, city, area, latitude, longitude)) 77 | conn.commit() 78 | except json.JSONDecodeError: 79 | print(f"Invalid JSON in file {json_path}") 80 | 81 | conn.close() 82 | 83 | # Create the SQLite database and tables 84 | db_path = 'flight_data.db' 85 | create_database(db_path) 86 | 87 | # Read the CSV file, rename columns, and insert data into SQLite database 88 | csv_path = '210720_all_locations_BFN.csv' 89 | df_csv = pd.read_csv(csv_path, sep='\t', encoding='ISO-8859-1') 90 | 91 | # Rename DataFrame columns to match the SQLite table schema 92 | df_csv.columns = [ 93 | 'id', 'Name', 'id_sub', 'Town', 'Prefecture', 'lat', 'long', 'facility_type', 94 | 'corroboration_level', 'ETNAM', 'Shawn_Zhang_list', 'Shawn_Zhang_num', 'ASPI_2020_num', 95 | 'XJVDB', 'Media_reports', 'Researchers', 'Links', 'Links_2', 'Links_3', 'Links_4' 96 | ] 97 | 98 | conn = sqlite3.connect(db_path) 99 | df_csv.to_sql('csv_locations', conn, if_exists='append', index=False) 100 | conn.close() 101 | 102 | # Process and insert JSON files 103 | directory = 'FlightLogExtract' 104 | 105 | for root, dirs, files in os.walk(directory): 106 | for file in files: 107 | if file.endswith('.json'): 108 | json_file_path = os.path.join(root, file) 109 | process_json_file(json_file_path, db_path) 110 | 111 | print("Data from CSV and JSON files has been successfully inserted into the SQLite database.") 112 | -------------------------------------------------------------------------------- /flight_data.db.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/flight_data.db.zip -------------------------------------------------------------------------------- /pics/YOU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/YOU.png -------------------------------------------------------------------------------- /pics/breakuserbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/breakuserbox.png -------------------------------------------------------------------------------- /pics/breakuserbox_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/breakuserbox_cn.png -------------------------------------------------------------------------------- /pics/consumers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/consumers.png -------------------------------------------------------------------------------- /pics/consumers_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/consumers_cn.png -------------------------------------------------------------------------------- /pics/dailyflightstats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/dailyflightstats.png -------------------------------------------------------------------------------- /pics/datacollection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/datacollection.png -------------------------------------------------------------------------------- /pics/earlydays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/earlydays.png -------------------------------------------------------------------------------- /pics/earlydays_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/earlydays_cn.png -------------------------------------------------------------------------------- /pics/heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/heatmap.png -------------------------------------------------------------------------------- /pics/logsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/logsearch.png -------------------------------------------------------------------------------- /pics/machinelearning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/machinelearning.png -------------------------------------------------------------------------------- /pics/machinelearning_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/machinelearning_cn.png -------------------------------------------------------------------------------- /pics/ministry_of_information_security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/ministry_of_information_security.png -------------------------------------------------------------------------------- /pics/ministry_of_information_security_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/ministry_of_information_security_cn.png -------------------------------------------------------------------------------- /pics/userportrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/pics/userportrait.png -------------------------------------------------------------------------------- /大数据产业发展规划(2016-2020年).doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/大数据产业发展规划(2016-2020年).doc -------------------------------------------------------------------------------- /大数据产业发展规划(2016-2020年).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/大数据产业发展规划(2016-2020年).pdf -------------------------------------------------------------------------------- /数据平台 - Data Platform/admin.wiki/data-platform.md: -------------------------------------------------------------------------------- 1 | # 数据平台相关资料 2 | 3 | [回首页](home) 4 | 5 | + [Web 界面](http://statistical-admin.djiservice.org/djigo) 6 | + [Kibana 视图](http://statistical.active.kibana.djiservice.org/app/kibana) 7 | 8 | ## 登录跳板机 9 | 10 | 可以使用 `ssh-copy-id` 和 `expect` (都需要自行安装)配合写脚本进行自动登录跳转并切换用户。具体原理和教程后面补充 11 | 12 | ## Rsyslog 配置 13 | 14 | ### 转发日志 15 | 16 | DJIService 的配置 `mina pro-hz-dsweb01 run[bash]` 这台机对 log 进行转发,发到 pro-hz-dsweb02 进行转发 17 | 18 | rsyslog 的配置在 `/etc/rsyslog.d` 文件夹中的 `10-file.conf` 中,内容为 19 | 20 | 杭州配置 21 | 22 | ``` 23 | $ModLoad imfile 24 | $template myFileMonitorTemplate,"%msg%" 25 | 26 | # File access 27 | #$InputFileName /data/home/service/project/current/log/logstash_production.log 28 | $InputFileName /data/home/service/project/shared/log/logstash_production.log 29 | $InputFileTag dji-log: 30 | # 下面这行是用来保存文件状态的 31 | $InputFileStateFile stat1470781524 32 | $InputFileSeverity info 33 | $InputFileFacility local7 34 | $InputFilePollInterval 1 35 | $InputFilePersistStateInterval 1 36 | $InputRunFileMonitor 37 | 38 | if $syslogtag contains 'dji-log' and $syslogfacility-text == 'local7' then @@192.168.6.26:15228;myFileMonitorTemplate 39 | & stop 40 | ``` 41 | 42 | 美国配置 43 | 44 | ``` 45 | $ModLoad imfile 46 | $template myFileMonitorTemplate,"%msg%" 47 | 48 | # File access 49 | #$InputFileName /data/home/service/project/current/log/logstash_production.log 50 | $InputFileName /data/home/service/project/shared/log/logstash_production.log 51 | $InputFileTag dji-log: 52 | $InputFileStateFile stat1470812347 53 | $InputFileSeverity info 54 | $InputFileFacility local7 55 | $InputFilePollInterval 1 56 | $InputFilePersistStateInterval 1 57 | $InputRunFileMonitor 58 | 59 | if $syslogtag contains 'dji-log' and $syslogfacility-text == 'local7' then @@10.1.1.57:15228;myFileMonitorTemplate 60 | & stop 61 | ``` 62 | 63 | 然后看 `/etc/logrotate.d` 文件夹中的 `_pro-hz-dsweb01` 文件,内容为 64 | 65 | ``` 66 | /data/home/service/project/shared/log/*.log { 67 | daily 68 | size 200M 69 | missingok 70 | rotate 52 71 | compress 72 | delaycompress 73 | notifempty 74 | copytruncate 75 | postrotate 76 | (sudo stop rsyslog && sudo sed -i "s/InputFileStateFile.*/InputFileStateFile stat$(date +'%s')/" /etc/rsyslog.d/10-file.conf && sudo start rsyslog 2>&1) || true 77 | endscript 78 | } 79 | ``` 80 | 81 | 这里需要注意的在 `postrotate` 部分会把 logrotate 处理完的文件的状态位置保存下来。 82 | 83 | 如果需要把之前的日志导入 es,只需要进入 `/data/home/service/project/current/log` 文件夹,对每个文件进行 cat xxx.log | nc 192.168.6.26:15288 即可 84 | 85 | ### 转发到 ES 86 | 87 | 用来转发的机器也是会利用 rsyslog 转发到 logstash 的端口 88 | 89 | 包括 logstash server 配置 90 | 91 | 然后到 `mina pro-hz-dsweb02 run[bash]` 92 | 93 | 老的日志在 `/data/home/service/project/current/log`,用同样的方法导入 94 | 95 | 修改在 `/etc/logstash/conf.d` 的配置可以更改位置,杭州配置内容为 96 | 97 | ``` 98 | # 杭州配置 99 | input { 100 | tcp { 101 | port=> 15228 102 | codec => json_lines 103 | buffer_size => 65536 104 | workers => 8 105 | } 106 | } 107 | 108 | filter { 109 | geoip { 110 | source => "ip" 111 | fields => ["location"] 112 | } 113 | } 114 | 115 | output { 116 | elasticsearch { 117 | hosts => ["http://statistical-es.djiservice.org:80"] 118 | index => "djiservice-log-" + "%{time}"[0,10] # 这里按照时间来写入 119 | user => "x" 120 | password => "x" 121 | } 122 | } 123 | ``` 124 | 125 | AWS 配置内容为 126 | 127 | ``` 128 | input { 129 | tcp { 130 | port=> 15228 131 | codec => json_lines 132 | 133 | buffer_size => 65536 134 | workers => 8 135 | } 136 | } 137 | 138 | filter { 139 | geoip { 140 | source => "ip" 141 | fields => ["location"] 142 | } 143 | } 144 | 145 | output { 146 | elasticsearch { 147 | hosts => ["http://statistical-es.djiservice.org:80"] 148 | index => "djiservice-log-" + "%{time}"[0,10] 149 | user => "x" 150 | password => "x" 151 | } 152 | } 153 | ``` 154 | ## 虚拟机配置 155 | 156 | 先登录跳板机,再进行下列操作 157 | 158 | 159 | ### 杭州 阿里云 160 | 161 | 切换到杭州阿里云服务器 `pro-hz-dsweb02`,这上面有 Logstash 相关配置 162 | 163 | ```bash 164 | # 杭州 165 | mina pro-hz-dsweb02 run[bash] 166 | # 需要进入 Logstash 所在文件夹 167 | cd ../logstash-5.0.0-alpha4 168 | # 运行模板 169 | ./bin/logstash -f file.conf 170 | # 例子:测试导入 hz actived info 171 | ./bin/logstash -f ./confs/hz_actived_info.conf 172 | ``` 173 | 174 | 这里有一点需要注意,因为有一段时间杭州和 AWS 的数据库有主从同步,所以需要过滤掉前面一致的记录,具体的间隔段在代码中有,只有第一次导入的时候需要,之后就可以利用记录的值继续,记得修改代码。 175 | 176 | 目前已经把之前的数据导入完成,新的数据请按照服务器上的代码进行导入 177 | 178 | 179 | ### 美国 AWS 180 | 181 | ```bash 182 | # AWS 183 | mina spro-usa-dsweb03 run[bash] 184 | # 需要进入 Logstash 所在文件夹 185 | cd ~/work/logstash-active/ 186 | # 例子:导入飞行数据和飞行记录(总览) 187 | bin/logstash -f confs/daily_flights_stats.conf 188 | bin/logstash -f confs/fly_records.conf 189 | ``` 190 | 191 | ### Elasticsearch 192 | 193 | 因为 ES 支持 RESTful API,所以我们可以利用 `curl` 命令来进行增删查改(可以把 ES 当面向文档的数据库用) 194 | 195 | ```bash 196 | # 例子:删除飞行记录索引 197 | curl -XDELETE -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/fly-records' 198 | # 例子:删除激活信息索引 199 | curl -XDELETE -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/actived-info' 200 | 201 | # 例子:获取飞行记录索引信息 202 | curl -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/fly-records' 203 | # 例子:获取激活索引信息 204 | curl -u logstash:PNIJZJWZ.NaJU 'statistical.active.djiservice.org:80/actived-info' 205 | ``` 206 | 207 | ## Rake 任务 208 | 209 | 目前已迁移到 statistic-server 项目中 210 | 211 | 从 Flurry 和 Google Analysis 导入数据的代码在 `data_center_backend/lib/tasks` 文件夹中,具体导入的命令为 212 | 213 | ```ruby 214 | # 导入 flurry 215 | rake flurry:fetch 216 | 217 | # 导入 google analysis 218 | rake ga:fetch 219 | ``` 220 | 221 | ## Logstash 任务 222 | 223 | 无论在杭州还是在 AWS 上的 Logstash 文件夹中,都有 `confs` 文件夹,里面包含具体的 logstash 配置,其中,每次正常运行后,都会把之前的运行记录在类似 `.[usa|hz]_*_*_last_run` 的隐藏文件中,注意不要删除。 224 | 225 | 实在不放心可以用 `cp` 命令进行备份,如 `cp .hz_actived_info_last_run .hz_actived_info_last_run.bak` 226 | 227 | 如果遇到内存不够的情况,考虑去掉 prefetch,并且开启 paging 功能 228 | 229 | ``` 230 | jdbc_fetch_size => 100 231 | 232 | jdbc_paging_enabled => true, 233 | jdbc_page_size => 2000, 234 | ``` 235 | 236 | daily-app-usages, daily-connected-products, daily-flight-stats, flight-distance-stats, 数据都很少,基本是直接都可以用的统计数据 237 | 238 | ## Kibana 相关 239 | 240 | 在使用 Logstash 把数据导入 Elasticsearch 后,需要在 Kibana 的 Setting 中手动添加对应数据的索引,才能显示出来。 241 | 242 | ## 飞行日志原始数据 243 | 244 | 数据因为历史原因保存在不同地方,具体的时间轴大概如下: 245 | 246 | ```txt 247 | 16年3月 16年6月 248 | |----------------------|-------------|--------------> 时间轴 249 | | 旧 AWS S3 | 阿里 OSS | 阿里 OSS 国内 250 | | (国内外均在) | (国内外均在) | 新 AWS S3 国外 251 | ``` 252 | 253 | ### 数据异常问题 254 | 255 | + 固件版本号为00.00.00.00,说明固件需要升级 256 | + OSMO sn非法或为空,表现为 sn:(null), sn:-1-1-1-1-1-1-1-1, 需要返厂 257 | + 例子:邮箱:”ryan500168@gmail.com" 7月20号 258 | + 飞机激活提示非法设备,固件版本号为00.00.00.00,需要升级飞机固件 259 | + 例子: 邮箱: “1073457478@qq.com” 7月20号 260 | + 737207405@qq.com 7月17号 261 | + 437321421@qq.com 7月18号 262 | + 服务器错误,可能是设备取名非法字符导致的 263 | + 例子:”xiaobudian712@163.com" 264 | 265 | ## DJI Service 相关 266 | 267 | ### 日志信息 268 | 269 | 详细内容均在 `dji-service/lib/dji/` 文件下,包含下载与解析日志内容,这部分可以重用,这里只简要记录关键信息 270 | 271 | 飞行记录字段 272 | 273 | + `total_time` 该次飞行总计飞行时间,单位毫秒 ms 274 | + `total_distance` 该次飞行总计距离,单位米 m 275 | + `max_height` 该次飞行最大高度,单位米 m 276 | + `max_horizontal_speed` 该次飞行水平最大速度,单位米每秒 m/s 277 | + `max_vertical_speed` 该次飞行垂直最大速度,单位米每秒 m/s 278 | + `capture_num` 该次飞行拍摄次数,单位次 279 | + `video_time` 该次飞行录像时间,单位秒 s 280 | + `drone_type` 该次飞行无人机类型,具体型号为 281 | + Inspire = 1 282 | + Phantom3C = 2 对应 P3S(具体产品型号) 283 | + Phantom3S = 3 对应 P3A(具体产品型号) 284 | + Phantom3X = 4 对应 P3P(具体产品型号) 285 | + Longan = 5 286 | + N1 = 6 287 | + Phantom4 = 7 288 | + LB2 = 8 飞控 289 | + Inspire1Pro = 9 290 | + `app_version` 该次飞行应用版本 291 | 292 | ### 收集的信息 293 | 294 | 具体可以参见 `app/models` 文件夹 295 | 296 | + 激活信息 Active Info `acitve_info.rb` 297 | + App 信息 App `app.rb` 298 | + 封禁 SN 信息 BanSnInfo `ban_sn_info.rb` 299 | + 电池信息 BatteryInfo `battery_info.rb` 300 | + 校准信息 CalibrationInfo `calibration_info.rb` 301 | + 每日活动 DailyActivation `daily_activation.rb` 302 | + 每日 App 使用 DailyAppUsage `daily_app_usage.rb` 303 | + 每日连接产品 DailyConnectedProduct `daily_connected_product.rb` 304 | + 每日飞行数据 DailyFlightStat `daily_flight_stat.rb` 305 | + 每日固件使用 DailyUsingFirmware `daily_using_firmware.rb` 306 | + 设备信息 Device `device.rb` 307 | + 设备注册日志 DeviceRegisterLog `device_register_log.rb` 308 | + 固件 Firmware `firmware.rb` 309 | + 固件详情 FirmwareDetail `firmware_detail.rb` 310 | + 固件包 FirmwarePack `firmware_pack.rb` 311 | + 固件升级日志 FirmwareUpgradeLog `firmware_upgrade_log.rb` 312 | + 飞行距离数据 FlightDistanceStat `flight_distance_stat.rb` 313 | + 飞行概况 FlightOverview `flight_overview.rb` 314 | + 飞行概况(旧) FlightOverviewOldNotInNew `flight_overview_old_not_in_new.rb` 315 | + 飞行问题 FlightProblem `flight_problem.rb` 316 | + 飞行记录详情 FlightRecordDetail `flight_record_detail.rb` 317 | + 飞行 UUID 概况 FlightUuidOverview `flight_uuid_overview.rb` 318 | + 飞行 UUID 概况(3)FlightUuidOverview3 `flight_uuid_overview3.rb` 319 | + 飞行记录 FlyRecord `fly_record.rb` 320 | + 硬件固件 HardwareFirmware `hardware_firmware.rb` 321 | + 硬件信息 HardwareInfo `hardware_info.rb` 322 | + 信息日志 InfoLogger `info_logger.rb` 323 | + 月飞行数据 MonthFlightStat `month_flight_stat.rb` 324 | + 问卷提交 QuestionaireSubmission `questionaire_submission` 325 | + SN 信息 SnInfo `sn_info.rb` 326 | + 特殊链接 SpecialLink `special_link.rb` 327 | + 特殊链接(改) SpecialLinkModified `special_link_modified.rb` 328 | + 用户 User `user.rb` 329 | + 用户检查 UserCheck `user_check.rb` 330 | -------------------------------------------------------------------------------- /数据平台 - Data Platform/admin.wiki/home.md: -------------------------------------------------------------------------------- 1 | # 数据平台服务端 2 | 3 | 主要包括为前端提供的接口以及 ELK 平台的搭建及部署。 4 | 5 | + [需求文档](requirement) 6 | + [数据平台基本操作](data-platform) 7 | 8 | ## 160801 会议 9 | 10 | + 把飞行数据导出为 parquet 格式并保存在 S3中(王达) 11 | + 基于 AWS SDK 的 Spark 集群的 Java 管理脚本(王达) 12 | + 找 IT 要发货的历史数据(王达) 13 | + 找海滨申请 Elasticsearch 虚拟机两台(非繁) 14 | + Elasticsearch 环境迁移及集群配置(非繁) -------------------------------------------------------------------------------- /数据平台 - Data Platform/admin.wiki/requirement.md: -------------------------------------------------------------------------------- 1 | # 需求文档 2 | 3 | [回首页](home) 4 | 5 | ## 需求列表 6 | 7 | ### 数据需求 8 | 9 | + 中日美德四国用户的基本行为统计(飞行时间、飞行次数) 10 | + 热力图数据标准化(算平均,而非总数) 11 | + 从出厂到激活时间统计计算 12 | + 代理商串货行为监测(比如发货到欧洲但第一次激活在美国) 13 | + 飞行数据的挖掘和利用 14 | 15 | ### 日志需求 16 | 17 | logstash + logrotate 18 | 19 | + 对接 DJI Service 的日志 20 | + 对接监管项目的日志 21 | 22 | ### 平台需求 23 | 24 | + AWS 启用 ES 集群,从 1 台扩展为 2 台 25 | + ~~阿里云为监管项目部署一台 ES 做测试~~ 26 | 27 | ## 任务列表 28 | 29 | ### 进行中 30 | 31 | + 导出已有的统计数据:daily-app-usages, daily-connected-products, daily-flight-stats, flight-distance-stats,保存到服务器 -> 上传到 S3 保存 32 | + 把飞行数据导出为 parquet 格式并保存在 S3中 33 | + 基于 AWS SDK 的 Spark 集群的 Java 管理脚本 34 | + 找 IT 要发货的历史数据 35 | + 从 S3(US) 和 OSS(CN) 处直接获取完整的飞行日志文件,确定 Bucket 和访问方式,需要对应的 access key 和 access id,具体如何访问看 AWS 和 Aliyun 文档 36 | + ES 的外网访问安全问题 37 | + 了解日志格式和编写读取脚本,考虑写入到 ES 中再进行处理统计 38 | 39 | ### 已排期 40 | 41 | + 检查重复点,导入 Aliyun 飞行记录 42 | + 分布式 ES 43 | 44 | ### 已完成 45 | 46 | + 导入 USA 飞行记录(不再导入到 es 中) 47 | + 导入 USA 激活信息 48 | + 导入 Aliyun 激活信息 49 | + 基本文档整理 -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】2016总结与规划.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】2016总结与规划.pptx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】eDM自助取数项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】eDM自助取数项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】取数引擎项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】取数引擎项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】安全设计报告(2016.10).docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】安全设计报告(2016.10).docx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】平台迁移项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】平台迁移项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】应用安全开发规范反馈(2016.12.23).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】应用安全开发规范反馈(2016.12.23).xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】数据门户项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】数据门户项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】机器学习项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】机器学习项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】第三方电商平台数据整合项目计划书.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】第三方电商平台数据整合项目计划书.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/【数据平台】菜单分布图(2017.03).xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/【数据平台】菜单分布图(2017.03).xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/activation_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/activation_count.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/dopms_buy_product_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/dopms_buy_product_count.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/dopms_order_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/dopms_order_count.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_city_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_city_count.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_count.xlsx -------------------------------------------------------------------------------- /数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_country_count.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/数据平台 - Data Platform/用户画像单项指标分类/takeoff_stat.takeoff_country_count.xlsx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/20160918-数据中心体系进度计划-201608版本.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/20160918-数据中心体系进度计划-201608版本.xlsx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/dmp 相关数据源及报表服务.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/dmp 相关数据源及报表服务.xmind -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/会员营销规划v0.5_20160612.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/会员营销规划v0.5_20160612.pptx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/全球代理IP库[测试部分].xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/全球代理IP库[测试部分].xlsx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/大疆舆情体系v0.5.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/大疆舆情体系v0.5.xmind -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/舆情.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情.xmind -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_规划讨论稿v1.0.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_规划讨论稿v1.0.pptx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_项目计划v1.0.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情分析_项目计划v1.0.xlsx -------------------------------------------------------------------------------- /舆情分析_规划讨论稿 - Public Opinion Analysis/舆情项目计划v1.0.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MAVProxyUser/UserPortrait/19164b1a05c3bd49dde6b41b41880ae5e8a9b617/舆情分析_规划讨论稿 - Public Opinion Analysis/舆情项目计划v1.0.xlsx --------------------------------------------------------------------------------