The Odysseus WebStudio is another way to interact with an Odysseus server. See WebStudio for further information.
Here, we will show a simple, docker-based introduction to a self hosted WebStudio. To follow this tutorial you will need to have docker installed. This could be done with Docker Desktop for Windows or MacOS or with an installation on Linux.
To get a quick startup, it is advisable to use the following docker compose file with
- WebStudio (see WebStudio)
- A single Odysseus Server
- Nexmark (see Getting Started with Nexmark)
services:
frontend:
image: odysseusol/webstudio_frontend:latest
ports:
- "4200:80"
environment:
NODE_ENV: production
restart: always
depends_on:
- backend
backend:
image: odysseusol/webstudio_backend:latest
ports:
- "3000:3000"
environment:
NODE_ENV: production
MONGODB_URI: mongodb://database:27017/webstudio
SECRET_TOKEN: jwtSecretToken
DOWNLOAD_TOKEN: downloadToken
PROJECTS_FOLDER: projects
ACCESS_TOKEN_LIFESPAN: 43200
restart: always
depends_on:
- database
volumes:
- backenddata:/home/node/app/projects
- ./backend/logs:/home/node/app/logs
database:
image: mongo
restart: always
ports:
- "27017:27017"
volumes:
- mongodbdata:/data/db
nexmark:
image: odysseusol/nexmark
restart: always
ports:
- 65440-65443:65440-65443
standalone01:
image: odysseusol/odysseus
stdin_open: true
restart: always
ports:
- 18888:8888
volumes:
- ./standalone01:/var/lib/odysseus
volumes:
mongodbdata:
backenddata:
Just copy this file to some location on your local disk and run
docker compose up -d
Remark: Because this is inside a docker environment you cannot use localhost for nexmark queries → use nexmark instead.
#PARSER PQL
#RUNQUERY
nexmark:person := ACCESS({source='nexmark:person',
wrapper='GenericPush',
transport='TCPClient',
protocol='SizeByteBuffer',
dataHandler='Tuple',
options=[
['host', 'nexmark'],
['port', '65440'],
['ByteOrder', 'LittleEndian']
],
schema=[
['timestamp', 'STARTTIMESTAMP'],
['id', 'INTEGER'],
['name', 'STRING'],
['email', 'STRING'],
['creditcard', 'STRING'],
['city', 'STRING'],
['state', 'STRING']
]
})
#RUNQUERY
nexmark:bid := ACCESS({source='nexmark:bid',
wrapper='GenericPush',
transport='TCPClient',
protocol='SizeByteBuffer',
dataHandler='Tuple',
options=[
['host', 'nexmark'],
['port', '65442'],
['ByteOrder', 'LittleEndian']
],
schema=[
['nexmark:bid','timestamp', 'STARTTIMESTAMP'],
['nexmark:bid','auction', 'INTEGER'],
['nexmark:bid','bidder', 'INTEGER'],
['nexmark:bid','datetime', 'LONG'],
['nexmark:bid','price', 'DOUBLE']
]
})
#RUNQUERY
nexmark:auction := ACCESS({source='nexmark:auction',
wrapper='GenericPush',
transport='TCPClient',
protocol='SizeByteBuffer',
dataHandler='Tuple',
options=[
['host', 'nexmark'],
['port', '65441'],
['ByteOrder', 'LittleEndian']
],
schema=[
['timestamp', 'STARTTIMESTAMP'],
['id', 'INTEGER'],
['itemname', 'STRING'],
['description', 'STRING'],
['initialbid', 'INTEGER'],
['reserve', 'INTEGER'],
['expires', 'LONG'],
['seller', 'INTEGER'],
['category', 'INTEGER']
]
})
#RUNQUERY
nexmark:category := ACCESS({source='nexmark:category',
wrapper='GenericPush',
transport='TCPClient',
protocol='SizeByteBuffer',
dataHandler='Tuple',
options=[
['host', 'nexmark'],
['port', '65443'],
['ByteOrder', 'LittleEndian']
],
schema=[
['id', 'INTEGER'],
['name', 'STRING'],
['description', 'STRING'],
['parentid', 'INTEGER']
]
})
You connect to a odysseus instance, you will need to use localhost, because the connection is done from the browser that is outside of docker!
