Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,10 @@ bdd/swagger.yml
/deploy-memory/terraform.tfstate.backup
/deploy-memory/ip.txt
/deploy-memory/.terraform

**/.classpath
**/.project
**/.settings
.vscode

__pycache__/
3 changes: 1 addition & 2 deletions User Tests.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@
"%%bash\n",
"rm -rf inventory_server/\n",
"rm -rf temp\n",
"mkdir temp\n",
"mkdir temp\\\\\n",
"cd temp\n",
"swagger-codegen generate -l python -i ../meta/src/main/docs/swagger.yml\n",
"swagger-codegen generate -l html -i ../meta/src/main/docs/swagger.yml\n",
Expand Down Expand Up @@ -253,7 +253,6 @@
"source": [
"from inventory_server.configuration import Configuration\n",
"from inventory_server.apis import DefaultApi\n",
"import os\n",
"\n",
"conf = Configuration()\n",
"conf.host = \"http://%s:5555\" % open(\"deploy-memory/ip.txt\", \"r\").read().strip()\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ static <A, B> Parser<Inventory> inventoryParser(Repository.FindBy<Category, A> c

inventory.setCategory(categoryRepository.findBy(finderFactory.lookFor(categoryFullName)));

if (jo.has("id")) {
if (jo.has("id") && !jo.isNull("id")) {
try {
inventory.setId(inventoryIdExtractor.extract(new URL(jo.getString("id")).getPath()));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

if (jo.has("parent")) {
if (jo.has("parent") && !jo.isNull("parent")) {
long parent_id;
try {
parent_id = inventoryIdExtractor.extract(new URL(jo.getString("parent")).getPath());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ static Parser<User> userParser(Repository.FindById<User> findById,
JSONObject jsonUser = new JSONObject(s);
User user = new User();

if (jsonUser.has("id")) {
if (jsonUser.has("id") && !jsonUser.isNull("id")) {
String id = jsonUser.getString("id");
try {
user = findById.findById(idExtractor.extract(new URL(id).getPath()));
Expand Down
3 changes: 1 addition & 2 deletions deploy-memory/memory.tf
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Specify the provider and access details
provider "aws" {
region = "${var.aws_region}"
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
profile = "inventoryserver"
}

# Create a VPC to launch our instances into
Expand Down
78 changes: 78 additions & 0 deletions locustfile_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
from locust import HttpLocust, TaskSet, task
from inventory_server.models import User, Inventory, Category, Metric
from faker import Faker
import random
import json

fake = Faker()
known_inventories = []
all_users = []

def none_or():
if random.randint(0,1) and len(known_inventories) > 0:
random.choice(known_inventories)
return None

def j(model):
return json.dumps(model.to_dict())

def gen_new_metric():
m = Metric(value=fake.text(), type=fake.word())
return m

def gen_new_inv():
inv = Inventory(
category=fake.domain_name(),
metrics=[gen_new_metric() for _ in range(0, random.randint(0,10))],
parent=none_or()
)
return inv

def gen_new_user():
u = User(name = fake.name(), inventories= list(filter(None, [none_or() for _ in range(0, random.randint(0,10))])))
return u

class InventoryTasks(TaskSet):
@task
def inventory_register(self):
response = self.client.post("/inventories", j(gen_new_inv()))

@task(10)
def all_inventory(self):
response = self.client.get("/inventories")
if(response.status_code < 400):
try:
global known_inventories
known_inventories = response.json()
except:
print(known_inventories)

@task(100)
def read(self):
if len(known_inventories) > 0:
inv = random.choice(known_inventories)
if 'id' in inv:
self.client.get(inv['id'], name='/inventories/[id]')


@task
def user_register(self):
self.client.post("/users", j(gen_new_user()))

@task(10)
def users_all(self):
response = self.client.get("/users")
global all_users
all_users = response.json()

@task(100)
def users_read(self):
if len(all_users) > 0:
u = random.choice(all_users)
if 'id' in u:
self.client.get(u['id'], name="/users/[id]")

class MyLocust(HttpLocust):
task_set = InventoryTasks
min_wait = 1000
max_wait = 5000
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.tailoredshapes.inventoryserver.repositories.memory.InMemoryLookers;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -52,11 +53,16 @@ static void route() {
log.debug("createInventory");
DAO<Inventory> dao = inventoryDAO;
Parser<Inventory> parser = inventoryParser;
Inventory inventory = parser.parse(req.body());
Inventory saved = Repository.save(dao).save(inventory);

res.redirect(inventoryUrlBuilder.build(saved), 303);
return null;
try {
Inventory inventory = parser.parse(req.body());
Inventory saved = Repository.save(dao).save(inventory);

res.redirect(inventoryUrlBuilder.build(saved), 303);
return null;
}catch (JSONException e){
log.error("Failed to parse: " + req.body());
throw e;
}
});

get("/inventories/:id", "application/json", (req, res) -> {
Expand All @@ -80,11 +86,17 @@ static void route() {

post("/users", "application/json", (req, res) -> {
log.debug("createUser");
User user = userParser.parse(req.body());
User saved = Repository.save(userDAO).save(user);
try {
User user = userParser.parse(req.body());
User saved = Repository.save(userDAO).save(user);

res.redirect(userUrlBuilder.build(saved), 303);
return null;
} catch (JSONException e){
log.error("Failed to parse: " + req.body());
throw e;
}

res.redirect(userUrlBuilder.build(saved), 303);
return null;
});

get("/users/:name/inventories", "application/json", (req, res) ->
Expand Down