---
# System prepended metadata

title: Extractor

---

---
title: 'Extractor'
---

# Feature

![](https://i.imgur.com/9h1adeO.png)
![](https://i.imgur.com/HFgOq6t.png)

IAE 啟動前會先對目標機器們，啟動 db-extractor 的 docker，未來需要把這段寫在 add machine 那邊

# Embulk vs db-extractor
1. embulk 1個 config 只會有一個SQL和一組Key 
   db-extractor 1 個 config 可以有多個 SQL 和一組共用的 KEY
   如下圖，3個SQL要顯示不一樣的Key
2. 現在會因為有 n 個 SQL就會有 n 個 embulk，也就會有 n 個 CSV，就會須要把這n 個 CSV 接在，
3. check point 從 {{}} 變成 :，例如: {{order_id}} 換成 :order_id

![](https://i.imgur.com/KnY8OlE.png)

# API
==Finish==
* GET /extractors 
  * **list all extractor**
* POST /extractors
  * **add new extractor**
  1. 檢查 cron job 格式
  2. 建立 setting data 目錄
  3. 建立 config (extrName.toml) 在 setting path
  * 未來 2 3 步驟失敗的話，要寫一個 defer 把目錄砍掉
* GET /extractors/{extractorID:string}
  * **get extractor**
* DELETE /extractors/{extractorID:string}
  * **delete extractor**
  1. Stop extractor
  2. Remove Directory 
* PUT /extractors/{extractorID:string}/start
  * **start extractor**
  1. 寫cronjob docker exec -i db-extractor ...
  * 未來可能需要檢查 docker db-extractor 是否存在
* PUT /extractors/{extractorID:string}/stop
  * **stop extractor**
  1. 移除 cronjob

==Pending==
* PUT /extractors/{extractorID:string}
  * **edit extractor**
  * 執行 edit 前會先確保停下來嗎? 還是要自己檢查? 沒有停的話不給edit嗎?
  * 1. Set Client
  * 2. if failue -> restore extractor

## API

原本想寫的跟這個一樣，後來覺得會跟 swagger 重複，就算了。
https://hackmd.io/Zz-aXCL8SZ6EHpxJaCJQcA?both


# FAQ
**Q. topic name ?**
A. 一個 pipe 只有一個 extractor，也只有一個 topic ，就用 pipe name


# Testcase

****