小豕
學習過程~備忘錄
Google Code Prettify
2018年6月3日 星期日
2016年7月14日 星期四
Generate Swagger Specification
在網路上與官方網站的範例大多是在 Application Server 上產生 swagger.json
但這種方法會讓 Server 浪費資源,也有漏洞的風險
Swagger高危漏洞,影響Html、PHP、Java和 Ruby等開發應用
原文網址:https://read01.com/Lz7eJg.html
最近終於找到能獨立產出 swagger.json 的方式,程式碼如下
但這種方法會讓 Server 浪費資源,也有漏洞的風險
Swagger高危漏洞,影響Html、PHP、Java和 Ruby等開發應用
原文網址:https://read01.com/Lz7eJg.html
最近終於找到能獨立產出 swagger.json 的方式,程式碼如下
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package test; | |
import java.io.File; | |
import java.io.FileNotFoundException; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.util.HashSet; | |
import java.util.Set; | |
import javax.ws.rs.Path; | |
import org.reflections.Reflections; | |
import com.fasterxml.jackson.core.JsonProcessingException; | |
import io.swagger.jaxrs.Reader; | |
import io.swagger.jaxrs.config.DefaultReaderConfig; | |
import io.swagger.models.Contact; | |
import io.swagger.models.Info; | |
import io.swagger.models.License; | |
import io.swagger.models.Scheme; | |
import io.swagger.models.Swagger; | |
import io.swagger.util.Json; | |
import io.swagger.util.Yaml; | |
public class TestSwagger { | |
public static void main(String[] args) { | |
String RESOURCE_PACKAGE = "com.abc.api.rest"; | |
Set<Class<?>> classes = new HashSet<Class<?>>(); | |
new Reflections(RESOURCE_PACKAGE).getTypesAnnotatedWith(Path.class).forEach(classes::add); | |
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class); | |
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class); | |
DefaultReaderConfig config = new DefaultReaderConfig(); | |
config.setScanAllResources(true); | |
Swagger baseSwagger = new Swagger(); | |
baseSwagger.addScheme(Scheme.HTTPS); | |
baseSwagger.setHost("api.abc.com"); | |
baseSwagger.setBasePath("/api"); | |
Info api_info = new Info(); | |
api_info.setTitle("Some API"); | |
api_info.setDescription("Access Data"); | |
api_info.setTermsOfService("None"); | |
Contact contact = new Contact(); | |
contact.setName("admin"); | |
contact.setEmail("admin@xxx.com"); | |
contact.setUrl(""); | |
api_info.setContact(contact); | |
License license = new License(); | |
license.name("None"); | |
api_info.setLicense(license); | |
api_info.setVersion("1.0.0"); | |
baseSwagger.setInfo(api_info); | |
try { | |
Swagger swagger = new Reader(baseSwagger, config).read(classes); | |
File json_file = new File("./build/doc/swagger.json"); | |
File yaml_file = new File("./build/doc/swagger.yaml"); | |
File file_dir = new File("./build/doc"); | |
if(!file_dir.exists()){ | |
file_dir.mkdirs(); | |
} | |
Json.mapper().writeValue(new FileOutputStream(json_file), swagger); | |
Yaml.mapper().writeValue(new FileOutputStream(yaml_file), swagger); | |
/* | |
String json = Json.mapper().writeValueAsString(swagger); | |
String yaml = Yaml.mapper().writeValueAsString(swagger); | |
System.out.println(yaml); | |
*/ | |
} catch (JsonProcessingException e) { | |
e.printStackTrace(); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
2016年3月5日 星期六
Distributed Load Testing Tool
Tsung http://tsung.erlang-projects.org/
這一套壓力測式的工具,設定相當方便 也提供相關數據圖表
需在每個 Client Node 安裝 Tsung 與 設定 SSH Authorized 登入,才能順利分散壓力
這一套壓力測式的工具,設定相當方便 也提供相關數據圖表
需在每個 Client Node 安裝 Tsung 與 設定 SSH Authorized 登入,才能順利分散壓力
SSH Authorized 設定範例
- cd /root
- ssh-keygen -t rsa
- cd .ssh
- cat id_rsa.pub > authorized_keys
- chmod 600 authorized_keys
- ssh-copy-id root@ClientNode
Tsung Install
- yum install erlang gnuplot libtemplate-perl liberation-sans-fonts perl-Template-Toolkit
- wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz
- tar zxvf tsung-1.6.0.tar.gz
- cd tsung-1.6.0
- ./configure && make && make install
Tsung Load Test Commond
- tsung -k -f test.xml start
Tsung Load Test Report Site
- http://testsite:8091/es/ts_web:status
2016年2月29日 星期一
wildfly 10 add postgresql jdbc driver
1. ./bin/jboss-cli.sh --connect
2. module add --name=org.postgresql --slot=main --resources=/software/java/postgresql-9.4.1208.jar --dependencies=javax.api,javax.transaction.api
3. /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)
執行完這3個步驟,回傳 {"outcome" => "success"}
即為增加成功
2. module add --name=org.postgresql --slot=main --resources=/software/java/postgresql-9.4.1208.jar --dependencies=javax.api,javax.transaction.api
3. /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)
即為增加成功
2016年2月21日 星期日
Apache Kafka 9.0 需注意的地方
Apache Kafka 9.0
Documentation http://kafka.apache.org/documentation.html
kafka 雖然沒限制 topics 的數量,但在機器數量少時 還是需要避免這種設計方式
因為kafka 是使用 file 的儲存方式,每一個topics 至少會產生1個目錄與2個檔案
kafka cluster 中的所有檔案數量是:
(topics * partition * replication-factor * 2) + (offsets * n)
100K topics 在 3台 kafka 主機裡,至少會產生:
(100K * 1 * 1 * 2) +(N) = 200k + N
每台 kafka 至少要產生 200K / 3 (約66666) 的檔案,超過一般linux fs.file-max = 65536 的設定,當然這還是有辦法解決
但在每個 partition 都需要相對應的 thread 來處理,這就比較麻煩了
100K 需要多少 thread 來處理才能夠即時回應,不造成timeout?
每台硬體都要有足夠的RAM 跟 夠好的 CPU時 也許可行, 但還是避掉這種設計會比較好
在設定檔有幾個需要注意的地方
server.properties
Documentation http://kafka.apache.org/documentation.html
kafka 雖然沒限制 topics 的數量,但在機器數量少時 還是需要避免這種設計方式
因為kafka 是使用 file 的儲存方式,每一個topics 至少會產生1個目錄與2個檔案
kafka cluster 中的所有檔案數量是:
(topics * partition * replication-factor * 2) + (offsets * n)
100K topics 在 3台 kafka 主機裡,至少會產生:
(100K * 1 * 1 * 2) +(N) = 200k + N
每台 kafka 至少要產生 200K / 3 (約66666) 的檔案,超過一般linux fs.file-max = 65536 的設定,當然這還是有辦法解決
但在每個 partition 都需要相對應的 thread 來處理,這就比較麻煩了
100K 需要多少 thread 來處理才能夠即時回應,不造成timeout?
每台硬體都要有足夠的RAM 跟 夠好的 CPU時 也許可行, 但還是避掉這種設計會比較好
在設定檔有幾個需要注意的地方
server.properties
- broker.id 需特別注意編號 每台主機不可重覆
- 如果需要 delete topic,需增加 delete.topic.enable=true
- client.id 在每個 thread 不能重覆
consumer.properties
可參考 http://myjeeva.com/zookeeper-cluster-setup.html
設定 zookeeper cluster id
- group.id=PG 修改預設的group id
- offsets.storage=kafka 設定 offset 資料存在 kafka
可參考 http://myjeeva.com/zookeeper-cluster-setup.html
修改 zookeeper.properties
設定 zookeeper cluster id
mkdir /tmp/zookeeper/
echo 1 > /tmp/zookeeper/myid (id 需特別注意編號,跟zookeeper.properties 需對應)
2016年2月15日 星期一
Jetty 參數修改
關閉 http dir view
修改 etc/webdefault.xml, dirAllowed value 設為 false設定 classloading 優先讀 jetty resources
修改 etc/jetty-deploy.xml,在 WebAppProvider 下增加預設classloading 順序為 webapps > jetty resources > jetty lib
改完參數則會變為 jetty lib > jetty resources > webapps
webapps 下的檔案, 如果 xml 跟 war 名稱不一致 會重覆載入
Server thread 設定max thread參考計算
thread.max > (http.acceptors + http.selectors + [http.request=1])
PostgreSQL Multi-Master 雙向複寫
安裝 PostgreSQL BDR 版本
What's BDR?
http://2ndquadrant.com/en-us/resources/bdr/
What's BDR?
http://2ndquadrant.com/en-us/resources/bdr/
Yum Install
- yum install http://packages.2ndquadrant.com/postgresql-bdr94-2ndquadrant/yum-repo-rpms/postgresql-bdr94-2ndquadrant-redhat-1.0-2.noarch.rpm
- yum install postgresql-bdr94-bdr
設定PostgreSQL lib
vi /etc/profile 增加下方資訊
export PATH=/usr/pgsql-9.4/bin:$PATH
Init DB
- service postgresql-9.4 initdb -E UTF8 --no-locale --locale=C LC_COLLATE='C' LC_CTYPE='C' -A trust -U postgres
- cd /var/lib/pgsql/9.4-bdr/
- vi data/pg_hba.conf
- vi data/postgresql.conf
- service postgresql-9.4 start
- chkconfig postgresql-9.4 on
Create DB
- CREATE ROLE message LOGIN ENCRYPTED PASSWORD 'yourpassword md5' VALID UNTIL 'infinity';
- CREATE DATABASE message WITH ENCODING='UTF8' OWNER=message TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1;
message DB, BDR Setting
##first node
CREATE EXTENSION btree_gist;
CREATE EXTENSION bdr;
SELECT bdr.bdr_group_create(
local_node_name := 'centos1',
node_external_dsn := 'host=centos1 dbname=message'
);
##second node
CREATE EXTENSION btree_gist;
CREATE EXTENSION bdr;
SELECT bdr.bdr_group_join(
local_node_name := 'centos2',
node_external_dsn := 'host=centos2 dbname=message',
join_using_dsn := 'host=centos1 dbname=message'
);
更多設定可參考quictstart
訂閱:
文章 (Atom)