Added dev server options
Implemented basic structure for mock service
This commit is contained in:
@@ -18,3 +18,13 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 443
|
||||
|
||||
|
||||
FROM node:latest as dev
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
ENV HOST=0.0.0.0
|
||||
COPY . .
|
||||
EXPOSE 8080
|
||||
CMD ["npm", "run", "dev"]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"dev": "vite --host",
|
||||
"build": "run-p type-check build-only",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
|
||||
53
Frontend/src/components/mock/HeadersComponent.vue
Normal file
53
Frontend/src/components/mock/HeadersComponent.vue
Normal file
@@ -0,0 +1,53 @@
|
||||
<script setup>
|
||||
import {ref} from 'vue';
|
||||
|
||||
const props = defineProps(
|
||||
{
|
||||
headersObject : Object
|
||||
}
|
||||
)
|
||||
const headerData = ref( props.headersObject )
|
||||
|
||||
const newHeaderName = ref('');
|
||||
const newHeaderValue = ref('');
|
||||
|
||||
function isHeaderEssential(headerName){
|
||||
return headerName == "Keep-Alive" || headerName == "Connection" || headerName == "Date"
|
||||
}
|
||||
|
||||
function setEssentialHeaderStyle(headerName){
|
||||
return isHeaderEssential(headerName) ? "text-gray-400" : "text-red-400";
|
||||
}
|
||||
|
||||
function deleteHeader(index){
|
||||
if(!isHeaderEssential(index)){
|
||||
delete headerData.value[index]
|
||||
}
|
||||
}
|
||||
|
||||
function addNewHeader(name, value){
|
||||
headerData.value[name] = value;
|
||||
newHeaderName.value = "";
|
||||
newHeaderValue.value = "";
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="w-full flex">
|
||||
<div class="w-full">Header name</div>
|
||||
<div class="w-full">Header value</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-4">
|
||||
<div class="flex gap-9 flex-row" v-for="(item, index) in headerData" :key="index">
|
||||
<input type="text" :value="index" class="w-full bg-gray-600 p-2" />
|
||||
<input type="text" :value="item" class="w-full bg-gray-600 p-2" />
|
||||
<button @click="deleteHeader(index)" :class="setEssentialHeaderStyle(index)">X</button>
|
||||
</div>
|
||||
<div class="flex gap-9 flex-row">
|
||||
<input type="text" v-model="newHeaderName" class="w-full p-2 bg-gray-600" />
|
||||
<input type="text" v-model="newHeaderValue" class="w-full p-2 bg-gray-600" />
|
||||
<button class="text-2xl" @click="addNewHeader(newHeaderName, newHeaderValue)" > + </button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
0
Frontend/src/components/mock/HistoryComponent.vue
Normal file
0
Frontend/src/components/mock/HistoryComponent.vue
Normal file
@@ -1,10 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<h1>RestMock</h1>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
69
Frontend/src/components/mock/RestMockMessageComponent.vue
Normal file
69
Frontend/src/components/mock/RestMockMessageComponent.vue
Normal file
@@ -0,0 +1,69 @@
|
||||
<script setup lang="ts">
|
||||
import {ref, onBeforeMount , type Ref} from 'vue';
|
||||
import HeadersComponent from './HeadersComponent.vue';
|
||||
|
||||
const clientUUID = ref('');
|
||||
const host = window.location.protocol + "//" + window.location.hostname + "/mock";
|
||||
const mockMessageLink = ref("www.google.com");
|
||||
|
||||
interface mockedMessageData {
|
||||
clientUUID: string;
|
||||
contentType: string;
|
||||
messageBody: object;
|
||||
httpHeaders: object;
|
||||
httpStatus: number;
|
||||
}
|
||||
|
||||
const exampleData : mockedMessageData = {
|
||||
clientUUID : "exampleUUID",
|
||||
contentType: "application/json",
|
||||
messageBody: {message: "hello!"},
|
||||
httpHeaders: {Connection:"keep-alive"},
|
||||
httpStatus: 200,
|
||||
}
|
||||
let messageData : Ref<mockedMessageData> = ref(exampleData) ;
|
||||
|
||||
|
||||
onBeforeMount( () => {
|
||||
if ( localStorage.clientUUID != undefined ){
|
||||
clientUUID.value = localStorage.clientUUID;
|
||||
}
|
||||
fetch(host + '/api/mock/' + clientUUID.value).then( response => response.json() ).then(data => putDataInFields(data));
|
||||
} )
|
||||
|
||||
function putDataInFields(data: mockedMessageData){
|
||||
clientUUID.value = data.clientUUID;
|
||||
localStorage.clientUUID = clientUUID.value
|
||||
mockMessageLink.value = host.replace("/mock","/api/mock")+"/r/"+clientUUID.value
|
||||
messageData = ref( data )
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex flex-col w-3/5 text-center gap-6">
|
||||
<div>
|
||||
<label for="link">Link</label><br/>
|
||||
<div class="p-2 border-white border-2">
|
||||
<a class="underline" :href="mockMessageLink">{{ mockMessageLink }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-row w-full gap-64">
|
||||
<div class="w-full">
|
||||
<label for="contentType">Content Type</label><br/>
|
||||
<input class="bg-gray-600 w-full" id="contentType" type="text" :value="messageData.contentType"/>
|
||||
</div>
|
||||
<div class=" w-full">
|
||||
<label for="httpStatus">HttpStatus</label><br/>
|
||||
<input class="bg-gray-600 w-full" id="httpStatus" type="text" :value="messageData.httpStatus"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<label for="messageBody">Body</label>
|
||||
<textarea class="bg-gray-600 h-64" id="messageBody" :value="messageData.messageBody.toString()"></textarea>
|
||||
</div>
|
||||
<HeadersComponent :key="JSON.stringify(messageData.httpHeaders)" :headers-object="messageData.httpHeaders"></HeadersComponent>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
@@ -34,6 +34,16 @@ const routes = [
|
||||
name: 'xslt',
|
||||
component: () => xsltTool
|
||||
},
|
||||
{
|
||||
path: '/xml/xpath',
|
||||
name: 'xpath',
|
||||
component: () => restMock
|
||||
},
|
||||
{
|
||||
path: '/rest/mock',
|
||||
name: 'restmock',
|
||||
component: () => restMock
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
<script lang="ts">
|
||||
import RestMockComponent from '@components/mock/RestMockComponent.vue'
|
||||
import RestMockMessageComponent from '@components/mock/RestMockMessageComponent.vue'
|
||||
import mockedMessageData from '@components/mock/RestMockMessageComponent.vue'
|
||||
|
||||
export default {
|
||||
name:"RestMockView",
|
||||
components: {RestMockComponent}
|
||||
components: {RestMockMessageComponent}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<template>
|
||||
<RestMockComponent></RestMockComponent>
|
||||
<div class="flex w-full h-screen items-center flex-col">
|
||||
<RestMockMessageComponent></RestMockMessageComponent>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
@@ -8,6 +8,27 @@ export default defineConfig({
|
||||
plugins: [
|
||||
vue(),
|
||||
],
|
||||
server:{
|
||||
port: 80,
|
||||
host: '0.0.0.0',
|
||||
proxy : {
|
||||
'/java': {
|
||||
target:'http://xmltools-backend:8081/',
|
||||
rewrite: (path) => path.replace(/^\/java/, ''),
|
||||
},
|
||||
'/libxml': {
|
||||
target:'http://xmltools-libxml-backend/',
|
||||
rewrite: (path) => path.replace(/^\/libxml/, ''),
|
||||
},
|
||||
'/mock': {
|
||||
target:'http://xmltools-mocked-services:8097/',
|
||||
rewrite: (path) => path.replace(/^\/mock/, ''),
|
||||
},
|
||||
'/api/mock': {
|
||||
target: 'http://xmltools-mocked-services:8097/'
|
||||
}
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||||
|
||||
75
docker-compose.dev.yml
Normal file
75
docker-compose.dev.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
redis:
|
||||
container_name: xmltools-redis
|
||||
build: ./Redis
|
||||
restart: "no"
|
||||
|
||||
xmltools-frontend:
|
||||
build:
|
||||
context: ./Frontend
|
||||
target: dev
|
||||
container_name: xmltools-frontend
|
||||
image: xmltools-frontend
|
||||
ports:
|
||||
- 80:80
|
||||
volumes:
|
||||
- ./Frontend:/app
|
||||
- /app/node_modules
|
||||
xmltools-backend:
|
||||
build: ./Backend/tools-services
|
||||
container_name: xmltools-backend
|
||||
image: xmltools-backend
|
||||
ports:
|
||||
- 8081:8081
|
||||
|
||||
xmltools-libxml-backend:
|
||||
build: ./Backend-libXML
|
||||
container_name: xmltools-libxml-backend
|
||||
image: xmltools-libxml-backend
|
||||
ports:
|
||||
- 8082:80
|
||||
|
||||
xmltools-mocked-services:
|
||||
build:
|
||||
context: ./Backend/mocked-services
|
||||
dockerfile: Dockerfile
|
||||
container_name: xmltools-mocked-services
|
||||
restart: "no"
|
||||
ports:
|
||||
- "8097:8097"
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
SPRING_PROFILES_ACTIVE: DEV
|
||||
TZ: Europe/Warsaw
|
||||
|
||||
swagger:
|
||||
image: "swaggerapi/swagger-ui:latest"
|
||||
container_name: xmltools-swagger
|
||||
ports:
|
||||
- "8000:8080"
|
||||
environment:
|
||||
- BASE_URL=/swagger
|
||||
- SWAGGER_JSON=/Swagger/swagger.json
|
||||
volumes:
|
||||
- ./Swagger:/Swagger
|
||||
|
||||
filebeat:
|
||||
build: ./Filebeat
|
||||
container_name: xmltools-filebeat
|
||||
user: root
|
||||
volumes:
|
||||
- "./Filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"
|
||||
- "/var/lib/docker/containers:/var/lib/docker/containers:ro"
|
||||
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
environment:
|
||||
- ENV_TYPE
|
||||
command:
|
||||
- "-e"
|
||||
- "--strict.perms=false"
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: tools_network
|
||||
@@ -7,7 +7,9 @@ services:
|
||||
restart: "no"
|
||||
|
||||
xmltools-frontend:
|
||||
build: ./Frontend
|
||||
build:
|
||||
context: ./Frontend
|
||||
target: production-stage
|
||||
container_name: xmltools-frontend
|
||||
image: xmltools-frontend
|
||||
ports:
|
||||
|
||||
Reference in New Issue
Block a user