├── Capitulo 1
└── Cliente-REST
│ ├── .gitignore
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ └── br
│ │ └── com
│ │ └── alexandreesl
│ │ └── handson
│ │ ├── Application.java
│ │ ├── ApplicationConfig.java
│ │ ├── domain
│ │ └── Cliente.java
│ │ └── rest
│ │ └── ClienteRestService.java
│ └── resources
│ └── log4j2.xml
├── Capitulo 2
├── Pedido-REST
│ ├── .gitignore
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── br
│ │ │ └── com
│ │ │ └── alexandreesl
│ │ │ └── handson
│ │ │ ├── Application.java
│ │ │ ├── ApplicationConfig.java
│ │ │ ├── domain
│ │ │ ├── ItemPedido.java
│ │ │ ├── Pedido.java
│ │ │ └── StatusPedido.java
│ │ │ ├── dto
│ │ │ └── ItemPedidoDTO.java
│ │ │ └── rest
│ │ │ └── PedidoRestService.java
│ │ └── resources
│ │ ├── application.properties
│ │ └── log4j2.xml
└── meupipeline.conf
├── Capitulo 3
├── ScriptTestesClientes.jmx
├── ScriptTestesPedidos.jmx
└── meupipeline.conf
├── Capitulo 5
└── Dockerfile
├── Capitulo 6
├── comandoselasticsearch.txt
└── twitterpipeline.conf
└── README.md
/Capitulo 1/Cliente-REST/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 |
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | br.com.alexandreesl.handson
5 | Cliente-REST
6 | 1.0
7 | jar
8 |
9 |
10 | org.springframework.boot
11 | spring-boot-starter-parent
12 | 1.2.0.RELEASE
13 |
14 |
15 |
16 |
17 | org.springframework.boot
18 | spring-boot-starter-web
19 |
20 |
21 | org.springframework.boot
22 | spring-boot-starter-logging
23 |
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-log4j2
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-jersey
35 |
36 |
37 |
38 | org.slf4j
39 | jcl-over-slf4j
40 |
41 |
42 | org.slf4j
43 | jul-to-slf4j
44 |
45 |
46 | org.slf4j
47 | log4j-over-slf4j
48 |
49 |
50 |
51 | biz.paluch.logging
52 | logstash-gelf
53 | 1.7.0
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/src/main/java/br/com/alexandreesl/handson/Application.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Application {
8 | public static void main(String[] args) {
9 | SpringApplication.run(Application.class, args);
10 | }
11 | }
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/src/main/java/br/com/alexandreesl/handson/ApplicationConfig.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson;
2 |
3 | import javax.inject.Named;
4 |
5 | import org.glassfish.jersey.server.ResourceConfig;
6 | import org.springframework.context.annotation.Configuration;
7 |
8 | @Configuration
9 | public class ApplicationConfig {
10 |
11 | @Named
12 | static class JerseyConfig extends ResourceConfig {
13 | public JerseyConfig() {
14 | this.packages("br.com.alexandreesl.handson.rest");
15 | }
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/src/main/java/br/com/alexandreesl/handson/domain/Cliente.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.domain;
2 |
3 | public class Cliente {
4 |
5 | private long id;
6 |
7 | private String nome;
8 |
9 | private String email;
10 |
11 | public long getId() {
12 | return id;
13 | }
14 |
15 | public void setId(long id) {
16 | this.id = id;
17 | }
18 |
19 | public String getNome() {
20 | return nome;
21 | }
22 |
23 | public void setNome(String nome) {
24 | this.nome = nome;
25 | }
26 |
27 | public String getEmail() {
28 | return email;
29 | }
30 |
31 | public void setEmail(String email) {
32 | this.email = email;
33 | }
34 |
35 | @Override
36 | public boolean equals(Object obj) {
37 |
38 | Cliente cliente = (Cliente) obj;
39 |
40 | return id == cliente.getId() ? true : false;
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/src/main/java/br/com/alexandreesl/handson/rest/ClienteRestService.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.rest;
2 |
3 | import java.util.Collection;
4 | import java.util.HashMap;
5 | import java.util.Map;
6 |
7 | import javax.inject.Named;
8 | import javax.ws.rs.Consumes;
9 | import javax.ws.rs.DELETE;
10 | import javax.ws.rs.GET;
11 | import javax.ws.rs.POST;
12 | import javax.ws.rs.PUT;
13 | import javax.ws.rs.Path;
14 | import javax.ws.rs.Produces;
15 | import javax.ws.rs.QueryParam;
16 | import javax.ws.rs.core.MediaType;
17 |
18 | import org.apache.logging.log4j.LogManager;
19 | import org.apache.logging.log4j.Logger;
20 |
21 | import br.com.alexandreesl.handson.domain.Cliente;
22 |
23 | @Named
24 | @Path("/")
25 | public class ClienteRestService {
26 |
27 | private static final Logger logger = LogManager.getLogger(ClienteRestService.class.getName());
28 |
29 | private static Map clientes = new HashMap();
30 |
31 | private static long contadorErroCaotico;
32 |
33 | static {
34 |
35 | Cliente cliente1 = new Cliente();
36 | cliente1.setId(1);
37 | cliente1.setNome("Cliente 1");
38 | cliente1.setEmail("customer1@gmail.com");
39 |
40 | Cliente cliente2 = new Cliente();
41 | cliente2.setId(2);
42 | cliente2.setNome("Cliente 2");
43 | cliente2.setEmail("customer2@gmail.com");
44 |
45 | Cliente cliente3 = new Cliente();
46 | cliente3.setId(3);
47 | cliente3.setNome("Cliente 3");
48 | cliente3.setEmail("customer3@gmail.com");
49 |
50 | Cliente cliente4 = new Cliente();
51 | cliente4.setId(4);
52 | cliente4.setNome("Cliente 4");
53 | cliente4.setEmail("customer4@gmail.com");
54 |
55 | Cliente cliente5 = new Cliente();
56 | cliente5.setId(5);
57 | cliente5.setNome("Cliente 5");
58 | cliente5.setEmail("customer5@gmail.com");
59 |
60 | clientes.put(cliente1.getId(), cliente1);
61 | clientes.put(cliente2.getId(), cliente2);
62 | clientes.put(cliente3.getId(), cliente3);
63 | clientes.put(cliente4.getId(), cliente4);
64 | clientes.put(cliente5.getId(), cliente5);
65 |
66 | }
67 |
68 | @GET
69 | @Produces(MediaType.APPLICATION_JSON)
70 | public Collection getClientes() {
71 |
72 | logger.info("Foram buscados " + clientes.values().size() + " clientes");
73 |
74 | return clientes.values();
75 | }
76 |
77 | @GET
78 | @Path("cliente")
79 | @Produces(MediaType.APPLICATION_JSON)
80 | public Cliente getCliente(@QueryParam("id") long id) {
81 |
82 | Cliente cli = null;
83 |
84 | for (Cliente c : clientes.values()) {
85 |
86 | if (c.getId() == id)
87 | cli = c;
88 |
89 | }
90 |
91 | logger.info("foi buscado o cliente " + cli.getNome());
92 |
93 | return cli;
94 | }
95 |
96 | @POST
97 | @Consumes(MediaType.APPLICATION_JSON)
98 | public void addCliente(Cliente cliente) {
99 |
100 | logger.warn("O cliente " + cliente.getId() + " foi inserido!");
101 |
102 | clientes.put(cliente.getId(), cliente);
103 |
104 | }
105 |
106 | @PUT
107 | @Consumes(MediaType.APPLICATION_JSON)
108 | public void mergeCliente(Cliente cliente) {
109 |
110 | contadorErroCaotico++;
111 |
112 | if ((contadorErroCaotico) % 7 == 0) {
113 | throw new RuntimeException("Ocorreu um erro caótico!");
114 | }
115 |
116 |
117 | logger.info("O cliente " + cliente.getId() + " foi alterado!");
118 |
119 | Cliente temp = clientes.get(cliente.getId());
120 |
121 | temp.setNome(cliente.getNome());
122 | temp.setEmail(cliente.getEmail());
123 |
124 | }
125 |
126 | @DELETE
127 | public void deleteCliente(@QueryParam("id") long id) {
128 |
129 | logger.info("O cliente " + id + " foi excluido!");
130 |
131 | clientes.remove(id);
132 | }
133 |
134 | }
135 |
--------------------------------------------------------------------------------
/Capitulo 1/Cliente-REST/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | br.com.alexandreesl.handson
5 | Pedido-REST
6 | 1.0
7 | jar
8 |
9 |
10 | org.springframework.boot
11 | spring-boot-starter-parent
12 | 1.2.0.RELEASE
13 |
14 |
15 |
16 |
17 | org.springframework.boot
18 | spring-boot-starter-web
19 |
20 |
21 | org.springframework.boot
22 | spring-boot-starter-logging
23 |
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-log4j2
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-jersey
35 |
36 |
37 |
38 |
39 | org.slf4j
40 | jcl-over-slf4j
41 |
42 |
43 | org.slf4j
44 | jul-to-slf4j
45 |
46 |
47 | org.slf4j
48 | log4j-over-slf4j
49 |
50 |
51 |
52 | biz.paluch.logging
53 | logstash-gelf
54 | 1.7.0
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/Application.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Application {
8 | public static void main(String[] args) {
9 | SpringApplication.run(Application.class, args);
10 | }
11 | }
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/ApplicationConfig.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson;
2 |
3 | import javax.inject.Named;
4 |
5 | import org.glassfish.jersey.server.ResourceConfig;
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.context.annotation.Configuration;
8 | import org.springframework.web.client.RestTemplate;
9 |
10 | @Configuration
11 | public class ApplicationConfig {
12 |
13 | @Named
14 | static class JerseyConfig extends ResourceConfig {
15 | public JerseyConfig() {
16 | this.packages("br.com.alexandreesl.handson.rest");
17 | }
18 | }
19 |
20 | @Bean
21 | public RestTemplate restTemplate() {
22 | RestTemplate restTemplate = new RestTemplate();
23 |
24 | return restTemplate;
25 | }
26 |
27 | }
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/domain/ItemPedido.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.domain;
2 |
3 | public class ItemPedido {
4 |
5 | private long idProduto;
6 |
7 | private long quantidade;
8 |
9 | public long getIdProduto() {
10 | return idProduto;
11 | }
12 |
13 | public void setIdProduto(long idProduto) {
14 | this.idProduto = idProduto;
15 | }
16 |
17 | public long getQuantidade() {
18 | return quantidade;
19 | }
20 |
21 | public void setQuantidade(long quantidade) {
22 | this.quantidade = quantidade;
23 | }
24 |
25 | @Override
26 | public boolean equals(Object obj) {
27 |
28 | ItemPedido item = (ItemPedido) obj;
29 |
30 | return idProduto == item.getIdProduto() ? true : false;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/domain/Pedido.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.domain;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Date;
5 | import java.util.List;
6 |
7 | public class Pedido {
8 |
9 | private long id;
10 |
11 | private Date dataPedido;
12 |
13 | private long idCliente;
14 |
15 | private List items;
16 |
17 | private StatusPedido status;
18 |
19 | public StatusPedido getStatus() {
20 | return status;
21 | }
22 |
23 | public void setStatus(StatusPedido status) {
24 | this.status = status;
25 | }
26 |
27 | public long getId() {
28 | return id;
29 | }
30 |
31 | public void setId(long id) {
32 | this.id = id;
33 | }
34 |
35 | public Date getDataPedido() {
36 | return dataPedido;
37 | }
38 |
39 | public void setDataPedido(Date dataPedido) {
40 | this.dataPedido = dataPedido;
41 | }
42 |
43 | public long getIdCliente() {
44 | return idCliente;
45 | }
46 |
47 | public void setIdCliente(long idCliente) {
48 | this.idCliente = idCliente;
49 | }
50 |
51 | public List getItems() {
52 |
53 | if (items == null) {
54 | items = new ArrayList();
55 | }
56 |
57 | return items;
58 | }
59 |
60 | public void setItems(List items) {
61 | this.items = items;
62 | }
63 |
64 | @Override
65 | public boolean equals(Object obj) {
66 |
67 | Pedido pedido = (Pedido) obj;
68 |
69 | return id == pedido.getId() ? true : false;
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/domain/StatusPedido.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.domain;
2 |
3 | public enum StatusPedido {
4 |
5 | ABERTO("ABERTO"), CONCLUIDO("CONCLUIDO"), CANCELADO("CANCELADO");
6 |
7 | private final String status;
8 |
9 | private StatusPedido(String statusPedido) {
10 | status = statusPedido;
11 | }
12 |
13 | public String toString() {
14 | return this.status;
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/dto/ItemPedidoDTO.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.dto;
2 |
3 | import br.com.alexandreesl.handson.domain.ItemPedido;
4 |
5 | public class ItemPedidoDTO {
6 |
7 | private long idPedido;
8 |
9 | private long idCliente;
10 |
11 | private ItemPedido item;
12 |
13 | public long getIdCliente() {
14 | return idCliente;
15 | }
16 |
17 | public void setIdCliente(long idCliente) {
18 | this.idCliente = idCliente;
19 | }
20 |
21 | public long getIdPedido() {
22 | return idPedido;
23 | }
24 |
25 | public void setIdPedido(long idPedido) {
26 | this.idPedido = idPedido;
27 | }
28 |
29 | public ItemPedido getItem() {
30 | return item;
31 | }
32 |
33 | public void setItem(ItemPedido item) {
34 | this.item = item;
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/java/br/com/alexandreesl/handson/rest/PedidoRestService.java:
--------------------------------------------------------------------------------
1 | package br.com.alexandreesl.handson.rest;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Date;
5 | import java.util.List;
6 |
7 | import javax.inject.Named;
8 | import javax.ws.rs.Consumes;
9 | import javax.ws.rs.DELETE;
10 | import javax.ws.rs.GET;
11 | import javax.ws.rs.POST;
12 | import javax.ws.rs.PUT;
13 | import javax.ws.rs.Path;
14 | import javax.ws.rs.PathParam;
15 | import javax.ws.rs.Produces;
16 | import javax.ws.rs.core.MediaType;
17 |
18 | import org.apache.logging.log4j.LogManager;
19 | import org.apache.logging.log4j.Logger;
20 |
21 | import br.com.alexandreesl.handson.domain.Pedido;
22 | import br.com.alexandreesl.handson.domain.StatusPedido;
23 | import br.com.alexandreesl.handson.dto.ItemPedidoDTO;
24 |
25 | @Named
26 | @Path("/")
27 | public class PedidoRestService {
28 |
29 | private static List pedidosMock = new ArrayList();
30 |
31 | private static final Logger logger = LogManager.getLogger(PedidoRestService.class.getName());
32 |
33 | private static long contadorErroCaotico;
34 |
35 | @GET
36 | @Produces(MediaType.APPLICATION_JSON)
37 | public List buscarPedidos() {
38 |
39 | logger.info("foram buscados todos os pedidos!");
40 |
41 | return pedidosMock;
42 |
43 | }
44 |
45 | @GET
46 | @Path("pedido/{idCliente}")
47 | @Produces(MediaType.APPLICATION_JSON)
48 | public List buscarPedidosPorCliente(@PathParam("idCliente") long idCliente) {
49 |
50 | List pedidos = new ArrayList();
51 |
52 | for (Pedido pedido : pedidosMock) {
53 |
54 | if (pedido.getIdCliente() == idCliente)
55 | pedidos.add(pedido);
56 | }
57 |
58 | logger.info("cliente " + idCliente + " possui " + pedidos.size() + " pedidos");
59 |
60 | return pedidos;
61 |
62 | }
63 |
64 | @POST
65 | @Path("item/adiciona")
66 | @Consumes(MediaType.APPLICATION_JSON)
67 | public void adicionaItemPedido(ItemPedidoDTO item) {
68 |
69 | contadorErroCaotico++;
70 |
71 | if ((contadorErroCaotico) % 7 == 0) {
72 | throw new RuntimeException("Ocorreu um erro caótico!");
73 | }
74 |
75 | // se for pedido novo, cria, senao somente adiciona o item
76 |
77 | long idCliente = 0;
78 |
79 | boolean pedidoNovo = true;
80 |
81 | for (Pedido pedido : pedidosMock) {
82 |
83 | if (pedido.getId() == item.getIdPedido()) {
84 | pedido.getItems().add(item.getItem());
85 |
86 | idCliente = pedido.getIdCliente();
87 |
88 | pedidoNovo = false;
89 | }
90 |
91 | }
92 |
93 | if (pedidoNovo) {
94 | Pedido pedido = new Pedido();
95 |
96 | idCliente = item.getIdCliente();
97 | pedido.setId(item.getIdPedido());
98 | pedido.setDataPedido(new Date());
99 | pedido.setIdCliente(item.getIdCliente());
100 | pedido.getItems().add(item.getItem());
101 | pedido.setStatus(StatusPedido.ABERTO);
102 |
103 | pedidosMock.add(pedido);
104 |
105 | }
106 |
107 | logger.info("pedido " + item.getIdPedido() + " do cliente " + idCliente + " adicionou o produto "
108 | + item.getItem().getIdProduto());
109 |
110 | }
111 |
112 | @POST
113 | @Path("item/remove")
114 | @Consumes(MediaType.APPLICATION_JSON)
115 | public void removeItemPedido(ItemPedidoDTO item) {
116 |
117 | long idCliente = 0;
118 |
119 | for (Pedido pedido : pedidosMock) {
120 |
121 | if (pedido.getId() == item.getIdPedido()) {
122 |
123 | pedido.getItems().remove(item.getItem());
124 |
125 | idCliente = pedido.getIdCliente();
126 |
127 | }
128 |
129 | }
130 |
131 | logger.info("pedido " + item.getIdPedido() + " do cliente " + idCliente + " removeu o produto "
132 | + item.getItem().getIdProduto());
133 |
134 | }
135 |
136 | @PUT
137 | @Path("pedido/{idPedido}")
138 | public void pagaPedido(@PathParam("idPedido") long idPedido) {
139 |
140 | for (Pedido pedido : pedidosMock) {
141 |
142 | if (pedido.getId() == idPedido) {
143 |
144 | pedido.setStatus(StatusPedido.CONCLUIDO);
145 |
146 | }
147 |
148 | }
149 |
150 | logger.info("pedido " + idPedido + " efetivado");
151 |
152 | }
153 |
154 | @DELETE
155 | @Path("pedido/{idPedido}")
156 | public void cancelaPedido(@PathParam("idPedido") long idPedido) {
157 |
158 | for (Pedido pedido : pedidosMock) {
159 |
160 | if (pedido.getId() == idPedido) {
161 |
162 | pedido.setStatus(StatusPedido.CANCELADO);
163 |
164 | }
165 |
166 | }
167 |
168 | logger.info("pedido " + idPedido + " cancelado");
169 |
170 | }
171 |
172 | }
173 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port = 8081
2 |
--------------------------------------------------------------------------------
/Capitulo 2/Pedido-REST/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Capitulo 2/meupipeline.conf:
--------------------------------------------------------------------------------
1 | input {
2 | gelf{
3 |
4 | }
5 | }
6 |
7 | filter {
8 | grok {
9 | match => [ "message" , "O cliente %{NUMBER:idCliente} foi %{WORD:acao}!" ,
10 | "message", "cliente %{NUMBER:idCliente} possui %{NUMBER:qtdPedidos} pedidos",
11 | "message", "pedido %{NUMBER:idPedido} do cliente %{NUMBER:idCliente} %{WORD:acaoItemPedido} o produto %{NUMBER:idProdutoPedido}",
12 | "message", "pedido %{NUMBER:idPedido} %{WORD:acaoPedido}",
13 | "message" , "%{GREEDYDATA:logdefault}" ]
14 | }
15 | }
16 |
17 | output {
18 | stdout { codec => rubydebug }
19 | }
20 |
--------------------------------------------------------------------------------
/Capitulo 3/ScriptTestesClientes.jmx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | false
7 | true
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | continue
16 |
17 | false
18 | 1
19 |
20 | 1
21 | 1
22 | 1445179949000
23 | 1445179949000
24 | false
25 |
26 |
27 |
28 |
29 |
30 | true
31 |
32 |
33 |
34 | false
35 | {"id":6,"nome":"Cliente 6","email":"customer6@gmail.com"}
36 | =
37 |
38 |
39 |
40 | localhost
41 | 8081
42 |
43 |
44 |
45 |
46 |
47 | POST
48 | true
49 | false
50 | true
51 | false
52 | HttpClient4
53 | false
54 |
55 |
56 |
57 |
58 |
59 |
60 | Content-Type
61 | application/json
62 |
63 |
64 |
65 |
66 |
67 |
68 | true
69 |
70 |
71 |
72 | false
73 | {"id":7,"nome":"Cliente 7","email":"customer7@gmail.com"}
74 | =
75 |
76 |
77 |
78 | localhost
79 | 8081
80 |
81 |
82 |
83 |
84 |
85 | POST
86 | true
87 | false
88 | true
89 | false
90 | HttpClient4
91 | false
92 |
93 |
94 |
95 |
96 |
97 |
98 | Content-Type
99 | application/json
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | continue
108 |
109 | false
110 | 50
111 |
112 | 1
113 | 1
114 | 1445183051000
115 | 1445183051000
116 | false
117 |
118 |
119 |
120 |
121 |
122 | true
123 |
124 |
125 |
126 | false
127 | {"id":6,"nome":"Cliente 6 abc","email":"customer6abc@gmail.com"}
128 | =
129 |
130 |
131 |
132 | localhost
133 | 8081
134 |
135 |
136 |
137 |
138 |
139 | PUT
140 | true
141 | false
142 | true
143 | false
144 | HttpClient4
145 | false
146 |
147 |
148 |
149 |
150 |
151 |
152 | Content-Type
153 | application/json
154 |
155 |
156 |
157 |
158 |
159 |
160 | true
161 |
162 |
163 |
164 | false
165 | {"id":6,"nome":"Cliente 6","email":"customer6abc@gmail.com"}
166 | =
167 |
168 |
169 |
170 | localhost
171 | 8081
172 |
173 |
174 |
175 |
176 |
177 | PUT
178 | true
179 | false
180 | true
181 | false
182 | HttpClient4
183 | false
184 |
185 |
186 |
187 |
188 |
189 |
190 | Content-Type
191 | application/json
192 |
193 |
194 |
195 |
196 |
197 |
198 | true
199 |
200 |
201 |
202 | false
203 | {"id":7,"nome":"Cliente 7 abc","email":"customer7abc@gmail.com"}
204 | =
205 |
206 |
207 |
208 | localhost
209 | 8081
210 |
211 |
212 |
213 |
214 |
215 | PUT
216 | true
217 | false
218 | true
219 | false
220 | HttpClient4
221 | false
222 |
223 |
224 |
225 |
226 |
227 |
228 | Content-Type
229 | application/json
230 |
231 |
232 |
233 |
234 |
235 |
236 | true
237 |
238 |
239 |
240 | false
241 | {"id":7,"nome":"Cliente 7","email":"customer7abc@gmail.com"}
242 | =
243 |
244 |
245 |
246 | localhost
247 | 8081
248 |
249 |
250 |
251 |
252 |
253 | PUT
254 | true
255 | false
256 | true
257 | false
258 | HttpClient4
259 | false
260 |
261 |
262 |
263 |
264 |
265 |
266 | Content-Type
267 | application/json
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 | continue
276 |
277 | false
278 | 1
279 |
280 | 1
281 | 1
282 | 1445197879000
283 | 1445197879000
284 | false
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 | false
294 | 6
295 | =
296 | true
297 | id
298 |
299 |
300 |
301 | localhost
302 | 8081
303 |
304 |
305 |
306 |
307 |
308 | DELETE
309 | true
310 | false
311 | true
312 | false
313 | HttpClient4
314 | false
315 |
316 |
317 |
318 |
319 |
320 |
321 | Content-Type
322 | application/json
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 | false
333 | 7
334 | =
335 | true
336 | id
337 |
338 |
339 |
340 | localhost
341 | 8081
342 |
343 |
344 |
345 |
346 |
347 | DELETE
348 | true
349 | false
350 | true
351 | false
352 | HttpClient4
353 | false
354 |
355 |
356 |
357 |
358 |
359 |
360 | Content-Type
361 | application/json
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
--------------------------------------------------------------------------------
/Capitulo 3/ScriptTestesPedidos.jmx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | false
7 | true
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | continue
16 |
17 | false
18 | 1
19 |
20 | 1
21 | 3
22 | 1445185866000
23 | 1445185866000
24 | false
25 |
26 |
27 |
28 |
29 |
30 | true
31 |
32 |
33 |
34 | false
35 | {
36 | "idPedido": 1,
37 | "idCliente": 1,
38 | "item" : {
39 | "idProduto":1,
40 | "quantidade":3
41 | }
42 |
43 | }
44 | =
45 |
46 |
47 |
48 | localhost
49 | 8080
50 |
51 |
52 |
53 |
54 | item/adiciona
55 | POST
56 | true
57 | false
58 | true
59 | false
60 | HttpClient4
61 | false
62 |
63 |
64 |
65 |
66 |
67 |
68 | Content-Type
69 | application/json
70 |
71 |
72 |
73 |
74 |
75 |
76 | true
77 |
78 |
79 |
80 | false
81 | {
82 | "idPedido": 2,
83 | "idCliente": 2,
84 | "item" : {
85 | "idProduto":3,
86 | "quantidade":9
87 | }
88 |
89 | }
90 | =
91 |
92 |
93 |
94 | localhost
95 | 8080
96 |
97 |
98 |
99 |
100 | item/adiciona
101 | POST
102 | true
103 | false
104 | true
105 | false
106 | HttpClient4
107 | false
108 |
109 |
110 |
111 |
112 |
113 |
114 | Content-Type
115 | application/json
116 |
117 |
118 |
119 |
120 |
121 |
122 | true
123 |
124 |
125 |
126 | false
127 | {
128 | "idPedido": 3,
129 | "idCliente": 4,
130 | "item" : {
131 | "idProduto":1,
132 | "quantidade":5
133 | }
134 |
135 | }
136 | =
137 |
138 |
139 |
140 | localhost
141 | 8080
142 |
143 |
144 |
145 |
146 | item/adiciona
147 | POST
148 | true
149 | false
150 | true
151 | false
152 | HttpClient4
153 | false
154 |
155 |
156 |
157 |
158 |
159 |
160 | Content-Type
161 | application/json
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 | continue
170 |
171 | false
172 | 40
173 |
174 | 1
175 | 1
176 | 1445196501000
177 | 1445196501000
178 | false
179 |
180 |
181 |
182 |
183 |
184 | true
185 |
186 |
187 |
188 | false
189 | {
190 | "idPedido": 1,
191 | "item" : {
192 | "idProduto":2,
193 | "quantidade":3
194 | }
195 |
196 | }
197 | =
198 |
199 |
200 |
201 | localhost
202 | 8080
203 |
204 |
205 |
206 |
207 | item/adiciona
208 | POST
209 | true
210 | false
211 | true
212 | false
213 | HttpClient4
214 | false
215 |
216 |
217 |
218 |
219 |
220 |
221 | Content-Type
222 | application/json
223 |
224 |
225 |
226 |
227 |
228 |
229 | true
230 |
231 |
232 |
233 | false
234 | {
235 | "idPedido": 1,
236 | "item" : {
237 | "idProduto":67,
238 | "quantidade":1
239 | }
240 |
241 | }
242 | =
243 |
244 |
245 |
246 | localhost
247 | 8080
248 |
249 |
250 |
251 |
252 | item/adiciona
253 | POST
254 | true
255 | false
256 | true
257 | false
258 | HttpClient4
259 | false
260 |
261 |
262 |
263 |
264 |
265 |
266 | Content-Type
267 | application/json
268 |
269 |
270 |
271 |
272 |
273 |
274 | true
275 |
276 |
277 |
278 | false
279 | {
280 | "idPedido": 1,
281 | "item" : {
282 | "idProduto":6,
283 | "quantidade":7
284 | }
285 |
286 | }
287 | =
288 |
289 |
290 |
291 | localhost
292 | 8080
293 |
294 |
295 |
296 |
297 | item/adiciona
298 | POST
299 | true
300 | false
301 | true
302 | false
303 | HttpClient4
304 | false
305 |
306 |
307 |
308 |
309 |
310 |
311 | Content-Type
312 | application/json
313 |
314 |
315 |
316 |
317 |
318 |
319 | true
320 |
321 |
322 |
323 | false
324 | {
325 | "idPedido": 1,
326 | "item" : {
327 | "idProduto":6
328 | }
329 |
330 | }
331 | =
332 |
333 |
334 |
335 | localhost
336 | 8080
337 |
338 |
339 |
340 |
341 | item/remove
342 | POST
343 | true
344 | false
345 | true
346 | false
347 | HttpClient4
348 | false
349 |
350 |
351 |
352 |
353 |
354 |
355 | Content-Type
356 | application/json
357 |
358 |
359 |
360 |
361 |
362 |
363 | true
364 |
365 |
366 |
367 | false
368 | {
369 | "idPedido": 2,
370 | "item" : {
371 | "idProduto":5,
372 | "quantidade":3
373 | }
374 |
375 | }
376 | =
377 |
378 |
379 |
380 | localhost
381 | 8080
382 |
383 |
384 |
385 |
386 | item/adiciona
387 | POST
388 | true
389 | false
390 | true
391 | false
392 | HttpClient4
393 | false
394 |
395 |
396 |
397 |
398 |
399 |
400 | Content-Type
401 | application/json
402 |
403 |
404 |
405 |
406 |
407 |
408 | true
409 |
410 |
411 |
412 | false
413 | {
414 | "idPedido": 2,
415 | "item" : {
416 | "idProduto":3,
417 | "quantidade":1
418 | }
419 |
420 | }
421 | =
422 |
423 |
424 |
425 | localhost
426 | 8080
427 |
428 |
429 |
430 |
431 | item/adiciona
432 | POST
433 | true
434 | false
435 | true
436 | false
437 | HttpClient4
438 | false
439 |
440 |
441 |
442 |
443 |
444 |
445 | Content-Type
446 | application/json
447 |
448 |
449 |
450 |
451 |
452 |
453 | true
454 |
455 |
456 |
457 | false
458 | {
459 | "idPedido": 2,
460 | "item" : {
461 | "idProduto":6,
462 | "quantidade":7
463 | }
464 |
465 | }
466 | =
467 |
468 |
469 |
470 | localhost
471 | 8080
472 |
473 |
474 |
475 |
476 | item/adiciona
477 | POST
478 | true
479 | false
480 | true
481 | false
482 | HttpClient4
483 | false
484 |
485 |
486 |
487 |
488 |
489 |
490 | Content-Type
491 | application/json
492 |
493 |
494 |
495 |
496 |
497 |
498 | true
499 |
500 |
501 |
502 | false
503 | {
504 | "idPedido": 2,
505 | "item" : {
506 | "idProduto":6
507 | }
508 |
509 | }
510 | =
511 |
512 |
513 |
514 | localhost
515 | 8080
516 |
517 |
518 |
519 |
520 | item/remove
521 | POST
522 | true
523 | false
524 | true
525 | false
526 | HttpClient4
527 | false
528 |
529 |
530 |
531 |
532 |
533 |
534 | Content-Type
535 | application/json
536 |
537 |
538 |
539 |
540 |
541 |
542 | true
543 |
544 |
545 |
546 | false
547 | {
548 | "idPedido": 3,
549 | "item" : {
550 | "idProduto":5,
551 | "quantidade":3
552 | }
553 |
554 | }
555 | =
556 |
557 |
558 |
559 | localhost
560 | 8080
561 |
562 |
563 |
564 |
565 | item/adiciona
566 | POST
567 | true
568 | false
569 | true
570 | false
571 | HttpClient4
572 | false
573 |
574 |
575 |
576 |
577 |
578 |
579 | Content-Type
580 | application/json
581 |
582 |
583 |
584 |
585 |
586 |
587 | true
588 |
589 |
590 |
591 | false
592 | {
593 | "idPedido": 3,
594 | "item" : {
595 | "idProduto":3,
596 | "quantidade":1
597 | }
598 |
599 | }
600 | =
601 |
602 |
603 |
604 | localhost
605 | 8080
606 |
607 |
608 |
609 |
610 | item/adiciona
611 | POST
612 | true
613 | false
614 | true
615 | false
616 | HttpClient4
617 | false
618 |
619 |
620 |
621 |
622 |
623 |
624 | Content-Type
625 | application/json
626 |
627 |
628 |
629 |
630 |
631 |
632 | true
633 |
634 |
635 |
636 | false
637 | {
638 | "idPedido": 3,
639 | "item" : {
640 | "idProduto":6,
641 | "quantidade":7
642 | }
643 |
644 | }
645 | =
646 |
647 |
648 |
649 | localhost
650 | 8080
651 |
652 |
653 |
654 |
655 | item/adiciona
656 | POST
657 | true
658 | false
659 | true
660 | false
661 | HttpClient4
662 | false
663 |
664 |
665 |
666 |
667 |
668 |
669 | Content-Type
670 | application/json
671 |
672 |
673 |
674 |
675 |
676 |
677 | true
678 |
679 |
680 |
681 | false
682 | {
683 | "idPedido": 3,
684 | "item" : {
685 | "idProduto":6
686 | }
687 |
688 | }
689 | =
690 |
691 |
692 |
693 | localhost
694 | 8080
695 |
696 |
697 |
698 |
699 | item/remove
700 | POST
701 | true
702 | false
703 | true
704 | false
705 | HttpClient4
706 | false
707 |
708 |
709 |
710 |
711 |
712 |
713 | Content-Type
714 | application/json
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 | continue
723 |
724 | false
725 | 1
726 |
727 | 1
728 | 1
729 | 1445188787000
730 | 1445188787000
731 | false
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 | localhost
741 | 8080
742 |
743 |
744 |
745 |
746 | pedido/1
747 | PUT
748 | true
749 | false
750 | true
751 | false
752 | HttpClient4
753 | false
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 | localhost
762 | 8080
763 |
764 |
765 |
766 |
767 | pedido/2
768 | DELETE
769 | true
770 | false
771 | true
772 | false
773 | HttpClient4
774 | false
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 | localhost
783 | 8080
784 |
785 |
786 |
787 |
788 | pedido/3
789 | PUT
790 | true
791 | false
792 | true
793 | false
794 | HttpClient4
795 | false
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
--------------------------------------------------------------------------------
/Capitulo 3/meupipeline.conf:
--------------------------------------------------------------------------------
1 | input {
2 | gelf{
3 |
4 | }
5 | }
6 |
7 | filter {
8 | grok {
9 | match => [ "message" , "O cliente %{NUMBER:idCliente} foi %{WORD:acao}!" ,
10 | "message", "cliente %{NUMBER:idCliente} possui %{NUMBER:qtdPedidos} pedidos",
11 | "message", "pedido %{NUMBER:idPedido} do cliente %{NUMBER:idCliente} %{WORD:acaoItemPedido} o produto %{NUMBER:idProdutoPedido}",
12 | "message", "pedido %{NUMBER:idPedido} %{WORD:acaoPedido}",
13 | "message" , "%{GREEDYDATA:logdefault}" ]
14 | }
15 | mutate { "convert" => [ "idCliente" , "integer" ] }
16 | mutate { "convert" => [ "qtdPedidos" , "integer" ] }
17 | mutate { "convert" => [ "idPedido" , "integer" ] }
18 | mutate { "convert" => [ "idProdutoPedido" , "integer" ] }
19 | }
20 |
21 | output {
22 | stdout { codec => rubydebug }
23 | elasticsearch {
24 | hosts => [ "localhost:9200" ]
25 | index => "casadocodigo-%{+YYYY.MM.dd}"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Capitulo 5/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM kibana:5.1.2
2 | RUN su - kibana -c "/usr/share/kibana/bin/kibana-plugin install x-pack"
3 |
--------------------------------------------------------------------------------
/Capitulo 6/comandoselasticsearch.txt:
--------------------------------------------------------------------------------
1 | # mapeamentos
2 |
3 | curl -XPUT 'localhost:9200/loja/categoria/_mapping' -d '{
4 | "categoria" : {
5 | "properties" : {
6 | "nome" : {"type" : "string"}
7 | }
8 | } }'
9 |
10 | curl -XPUT 'localhost:9200/loja/produto/_mapping' -d '{
11 | "produto" : {
12 | "_parent" : { "type" : "categoria" },
13 | "properties" : {
14 | "sku" : {"type" : "integer"},
15 | "nome" : {"type" : "string"},
16 | "descricao" : {"type" : "string"},
17 | "marca" : {"type" : "string"},
18 | "estoque" : {"type" : "integer"}
19 | }
20 | } }'
21 |
22 | #categorias
23 |
24 | curl -XPOST 'localhost:9200/loja/categoria/Geladeiras?routing=Eletro' -d '{ "nome" : "Geladeiras" }'
25 | curl -XPOST 'localhost:9200/loja/categoria/Fogões?routing=Eletro' -d '{ "nome" : "Fogões" }'
26 | curl -XPOST 'localhost:9200/loja/categoria/Ar-condicionados?routing=Eletro' -d '{ "nome" : "Ar-condicionados" }'
27 | curl -XPOST 'localhost:9200/loja/categoria/Aspiradores?routing=Eletro' -d '{ "nome" : "Aspiradores" }'
28 | curl -XPOST 'localhost:9200/loja/categoria/Masculino?routing=Vestuário' -d '{ "nome" : "Masculino" }'
29 | curl -XPOST 'localhost:9200/loja/categoria/Feminino?routing=Vestuário' -d '{ "nome" : "Feminino" }'
30 | curl -XPOST 'localhost:9200/loja/categoria/Lar?routing=Lar' -d '{ "nome" : "Lar" }'
31 |
32 | #produtos
33 |
34 | curl -XPOST 'localhost:9200/loja/produto?parent=Geladeiras&routing=Eletro' -d '{ "sku" : 234565678,"nome":"produto 1", "marca": "marcaA","descricao":"esta é a descrição do produto 1","estoque":23 }'
35 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567288,"nome":"produto 12", "marca": "marcaA","descricao":"esta é a descrição do produto 12","estoque":3 }'
36 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567289,"nome":"produto 13", "marca": "marcaB","descricao":"esta é a descrição do produto 13","estoque":7 }'
37 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567290,"nome":"produto 14", "marca": "marcaC","descricao":"esta é a descrição do produto 14","estoque":11 }'
38 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567291,"nome":"produto 15", "marca": "marcaB","descricao":"esta é a descrição do produto 15","estoque":16 }'
39 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567292,"nome":"produto 16", "marca": "marcaA","descricao":"esta é a descrição do produto 16","estoque":20 }'
40 | curl -XPOST 'localhost:9200/loja/produto?parent=Fogões&routing=Eletro' -d '{ "sku" : 234567293,"nome":"produto 17", "marca": "marcaA","descricao":"esta é a descrição do produto 17","estoque":33 }'
41 |
42 |
43 | curl -XPOST 'localhost:9200/loja/produto?parent=Aspiradores&routing=Eletro' -d '{ "sku" : 147567288,"nome":"produto 33", "marca": "marcaA","descricao":"esta é a descrição do produto 33","estoque":67 }'
44 | curl -XPOST 'localhost:9200/loja/produto?parent=Aspiradores&routing=Eletro' -d '{ "sku" : 147567289,"nome":"produto 34", "marca": "marcaA","descricao":"esta é a descrição do produto 34","estoque":23 }'
45 | curl -XPOST 'localhost:9200/loja/produto?parent=Aspiradores&routing=Eletro' -d '{ "sku" : 147567290,"nome":"produto 35", "marca": "marcaA","descricao":"esta é a descrição do produto 35","estoque":53 }'
46 | curl -XPOST 'localhost:9200/loja/produto?parent=Ar-condicionados&routing=Eletro' -d '{ "sku" : 234561828,"nome":"produto 4", "marca": "marcaB","descricao":"esta é a descrição do produto 4","estoque":3 }'
47 | curl -XPOST 'localhost:9200/loja/produto?parent=Masculino&routing=Vestuário' -d '{ "sku" : 231007288,"nome":"produto 5", "marca": "marcaF","descricao":"esta é a descrição do produto 5","estoque":35 }'
48 | curl -XPOST 'localhost:9200/loja/produto?parent=Lar&routing=Lar' -d '{ "sku" : 234567900,"nome":"produto 6", "marca": "marcaH","descricao":"esta é a descrição do produto 6","estoque":89 }'
49 |
--------------------------------------------------------------------------------
/Capitulo 6/twitterpipeline.conf:
--------------------------------------------------------------------------------
1 |
2 | input {
3 | twitter {
4 | consumer_key => "..."
5 | consumer_secret => "..."
6 | keywords => ["coca cola","java","elasticsearch","amazon"]
7 | oauth_token => "..."
8 | oauth_token_secret => "..."
9 | }
10 | }
11 |
12 | output {
13 | stdout { codec => rubydebug }
14 | elasticsearch {
15 | hosts => [ "localhost:9200" ]
16 | index => "twitter-%{+YYYY.MM.dd}"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # livro-elasticsearch
2 |
--------------------------------------------------------------------------------