chore(frontend): move docker artificats into docker folder
This commit is contained in:
parent
dfe3b66f53
commit
892c5a4575
@ -13,7 +13,7 @@ memory() {
|
|||||||
# output:
|
# output:
|
||||||
# Memory Usage: 15804/15959MB (99.03%)
|
# Memory Usage: 15804/15959MB (99.03%)
|
||||||
local memory=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }')
|
local memory=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }')
|
||||||
/bin/containerpilot -putmetric "frontend_memory_percent=$memory"
|
/bin/containerpilot -putmetric "api_memory_percent=$memory"
|
||||||
}
|
}
|
||||||
|
|
||||||
# cpu load
|
# cpu load
|
||||||
@ -21,17 +21,17 @@ cpu() {
|
|||||||
# oneliner to display cpu load
|
# oneliner to display cpu load
|
||||||
# top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}'
|
# top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}'
|
||||||
local cpuload=$(uptime | awk '{printf "%.2f", $6}')
|
local cpuload=$(uptime | awk '{printf "%.2f", $6}')
|
||||||
/bin/containerpilot -putmetric "frontend_cpu_load=$cpuload"
|
/bin/containerpilot -putmetric "api_cpu_load=$cpuload"
|
||||||
}
|
}
|
||||||
|
|
||||||
diskusage() {
|
diskusage() {
|
||||||
local usage=$(df -P | grep '/$' | awk 'NR=2{print $3}' | sed 's/[^0-9\.]*//g')
|
local usage=$(df -P | grep '/$' | awk 'NR=2{print $3}' | sed 's/[^0-9\.]*//g')
|
||||||
/bin/containerpilot -putmetric "frontend_disk_usage=$usage"
|
/bin/containerpilot -putmetric "api_disk_usage=$usage"
|
||||||
}
|
}
|
||||||
|
|
||||||
diskcapacity() {
|
diskcapacity() {
|
||||||
local capacity=$(df -P | grep '/$' | awk 'NR=2{print $2}' | sed 's/[^0-9\.]*//g')
|
local capacity=$(df -P | grep '/$' | awk 'NR=2{print $2}' | sed 's/[^0-9\.]*//g')
|
||||||
/bin/containerpilot -putmetric "frontend_disk_capacity=$capacity"
|
/bin/containerpilot -putmetric "api_disk_capacity=$capacity"
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd=$1
|
cmd=$1
|
||||||
|
51
docker/frontend/Dockerfile
Normal file
51
docker/frontend/Dockerfile
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
FROM node:8-alpine
|
||||||
|
|
||||||
|
# Built in context of root folder in repo
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN set -x \
|
||||||
|
&& apk update \
|
||||||
|
&& apk add --update curl bash build-base git nginx python \
|
||||||
|
&& apk upgrade \
|
||||||
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
|
# Install Consul agent
|
||||||
|
ENV CONSUL_VERSION 0.7.0
|
||||||
|
ENV CONSUL_CHECKSUM b350591af10d7d23514ebaa0565638539900cdb3aaa048f077217c4c46653dd8
|
||||||
|
RUN curl --retry 7 --fail -vo /tmp/consul.zip "https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip" \
|
||||||
|
&& echo "${CONSUL_CHECKSUM} /tmp/consul.zip" | sha256sum -c \
|
||||||
|
&& unzip /tmp/consul -d /usr/local/bin \
|
||||||
|
&& rm /tmp/consul.zip \
|
||||||
|
&& mkdir /config
|
||||||
|
|
||||||
|
# Install ContainerPilot
|
||||||
|
ENV CP_SHA1 d06e289e6e0ca82156d77cea36ff0f0246fcca60
|
||||||
|
ENV CONTAINERPILOT_VERSION 3.1.0
|
||||||
|
RUN curl -Lo /tmp/containerpilot.tar.gz "https://github.com/joyent/containerpilot/releases/download/${CONTAINERPILOT_VERSION}/containerpilot-${CONTAINERPILOT_VERSION}.tar.gz" \
|
||||||
|
&& echo "${CP_SHA1} /tmp/containerpilot.tar.gz" | sha1sum -c \
|
||||||
|
&& tar zxf /tmp/containerpilot.tar.gz -C /bin \
|
||||||
|
&& rm /tmp/containerpilot.tar.gz
|
||||||
|
|
||||||
|
# Copy required files
|
||||||
|
RUN mkdir -p /opt/app/
|
||||||
|
COPY ./ /opt/app/
|
||||||
|
COPY ./docker/frontend/bin /bin
|
||||||
|
COPY ./docker/frontend/etc/nginx.conf.tmpl /etc/nginx/nginx.conf.tmpl
|
||||||
|
COPY ./docker/frontend/etc/containerpilot.json5 /etc/containerpilot.json5
|
||||||
|
ENV CONTAINERPILOT /etc/containerpilot.json5
|
||||||
|
|
||||||
|
WORKDIR /opt/app/
|
||||||
|
|
||||||
|
ENV BUILD=production
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
RUN npm install -g yarn
|
||||||
|
RUN yarn add lerna
|
||||||
|
|
||||||
|
RUN ./node_modules/.bin/lerna clean --yes --scope joyent-cp-frontend --include-filtered-dependencies \
|
||||||
|
&& ./node_modules/.bin/lerna bootstrap --scope joyent-cp-frontend --include-filtered-dependencies
|
||||||
|
|
||||||
|
WORKDIR /opt/app/packages/cp-frontend
|
||||||
|
RUN yarn build
|
||||||
|
|
||||||
|
CMD ["/bin/containerpilot"]
|
44
docker/frontend/bin/sensors.sh
Executable file
44
docker/frontend/bin/sensors.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
help() {
|
||||||
|
echo 'Uses cli tools free and top to determine current CPU and memory usage'
|
||||||
|
echo 'for the telemetry service.'
|
||||||
|
}
|
||||||
|
|
||||||
|
# memory usage in percent
|
||||||
|
memory() {
|
||||||
|
# awk oneliner to get memory usage
|
||||||
|
# free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
|
||||||
|
# output:
|
||||||
|
# Memory Usage: 15804/15959MB (99.03%)
|
||||||
|
local memory=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }')
|
||||||
|
/bin/containerpilot -putmetric "frontend_memory_percent=$memory"
|
||||||
|
}
|
||||||
|
|
||||||
|
# cpu load
|
||||||
|
cpu() {
|
||||||
|
# oneliner to display cpu load
|
||||||
|
# top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}'
|
||||||
|
local cpuload=$(uptime | awk '{printf "%.2f", $6}')
|
||||||
|
/bin/containerpilot -putmetric "frontend_cpu_load=$cpuload"
|
||||||
|
}
|
||||||
|
|
||||||
|
diskusage() {
|
||||||
|
local usage=$(df -P | grep '/$' | awk 'NR=2{print $3}' | sed 's/[^0-9\.]*//g')
|
||||||
|
/bin/containerpilot -putmetric "frontend_disk_usage=$usage"
|
||||||
|
}
|
||||||
|
|
||||||
|
diskcapacity() {
|
||||||
|
local capacity=$(df -P | grep '/$' | awk 'NR=2{print $2}' | sed 's/[^0-9\.]*//g')
|
||||||
|
/bin/containerpilot -putmetric "frontend_disk_capacity=$capacity"
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd=$1
|
||||||
|
if [ ! -z "$cmd" ]; then
|
||||||
|
shift 1
|
||||||
|
$cmd "$@"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
help
|
@ -38,21 +38,9 @@
|
|||||||
'-retry-interval', '10s'],
|
'-retry-interval', '10s'],
|
||||||
restarts: 'unlimited'
|
restarts: 'unlimited'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'is-built',
|
|
||||||
exec: '[ -d /opt/app/packages/cp-frontend/build/static ]'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'build',
|
|
||||||
exec: 'yarn run build',
|
|
||||||
when: {
|
|
||||||
source: 'is-built',
|
|
||||||
once: 'exitFailed'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'sensor_memory_usage',
|
name: 'sensor_memory_usage',
|
||||||
exec: '/bin/sensors memory',
|
exec: '/bin/sensors.sh memory',
|
||||||
timeout: '5s',
|
timeout: '5s',
|
||||||
when: {
|
when: {
|
||||||
interval: '5s'
|
interval: '5s'
|
||||||
@ -61,7 +49,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sensor_cpu_load',
|
name: 'sensor_cpu_load',
|
||||||
exec: '/bin/sensors cpu',
|
exec: '/bin/sensors.sh cpu',
|
||||||
timeout: '5s',
|
timeout: '5s',
|
||||||
when: {
|
when: {
|
||||||
interval: '5s'
|
interval: '5s'
|
||||||
@ -70,7 +58,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sensor_disk_capacity',
|
name: 'sensor_disk_capacity',
|
||||||
exec: '/bin/sensors diskcapacity',
|
exec: '/bin/sensors.sh diskcapacity',
|
||||||
timeout: '5s',
|
timeout: '5s',
|
||||||
when: {
|
when: {
|
||||||
interval: '60s'
|
interval: '60s'
|
||||||
@ -79,7 +67,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sensor_disk_usage',
|
name: 'sensor_disk_usage',
|
||||||
exec: '/bin/sensors diskusage',
|
exec: '/bin/sensors.sh diskusage',
|
||||||
timeout: '5s',
|
timeout: '5s',
|
||||||
when: {
|
when: {
|
||||||
interval: '60s'
|
interval: '60s'
|
||||||
@ -92,28 +80,28 @@
|
|||||||
tags: ['op'],
|
tags: ['op'],
|
||||||
metrics: [
|
metrics: [
|
||||||
{
|
{
|
||||||
namespace: 'cp_frontend',
|
namespace: 'frontend',
|
||||||
subsystem: 'memory',
|
subsystem: 'memory',
|
||||||
name: 'percent',
|
name: 'percent',
|
||||||
help: 'Percentage of memory used',
|
help: 'Percentage of memory used',
|
||||||
type: 'gauge'
|
type: 'gauge'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
namespace: 'cp_frontend',
|
namespace: 'frontend',
|
||||||
subsystem: 'cpu',
|
subsystem: 'cpu',
|
||||||
name: 'load',
|
name: 'load',
|
||||||
help: 'CPU load',
|
help: 'CPU load',
|
||||||
type: 'gauge'
|
type: 'gauge'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
namespace: 'cp_frontend',
|
namespace: 'frontend',
|
||||||
subsystem: 'disk',
|
subsystem: 'disk',
|
||||||
name: 'capacity',
|
name: 'capacity',
|
||||||
help: 'Disk capacity',
|
help: 'Disk capacity',
|
||||||
type: 'gauge'
|
type: 'gauge'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
namespace: 'cp_frontend',
|
namespace: 'frontend',
|
||||||
subsystem: 'disk',
|
subsystem: 'disk',
|
||||||
name: 'usage',
|
name: 'usage',
|
||||||
help: 'Disk usage',
|
help: 'Disk usage',
|
@ -71,7 +71,7 @@ traefik:
|
|||||||
#############################################################################
|
#############################################################################
|
||||||
frontend:
|
frontend:
|
||||||
build: ./
|
build: ./
|
||||||
dockerfile: packages/cp-frontend/Dockerfile
|
dockerfile: docker/frontend/Dockerfile
|
||||||
mem_limit: 512m
|
mem_limit: 512m
|
||||||
links:
|
links:
|
||||||
- consul:consul
|
- consul:consul
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
FROM quay.io/yldio/alpine-node-containerpilot:latest
|
|
||||||
|
|
||||||
RUN apk add --update nginx
|
|
||||||
|
|
||||||
ENV CONTAINERPILOT /etc/containerpilot.json5
|
|
||||||
|
|
||||||
RUN npm install -g npm@^4
|
|
||||||
RUN npm config set loglevel info \
|
|
||||||
&& yarn add lerna@^2.0.0-rc.5
|
|
||||||
|
|
||||||
RUN ./node_modules/.bin/lerna clean --yes --scope joyent-cp-frontend --include-filtered-dependencies \
|
|
||||||
&& ./node_modules/.bin/lerna bootstrap --scope joyent-cp-frontend --include-filtered-dependencies
|
|
||||||
|
|
||||||
COPY packages/cp-frontend/etc/containerpilot.json5 ${CONTAINERPILOT}
|
|
||||||
COPY packages/cp-frontend/etc/nginx.conf.tmpl /etc/nginx/nginx.conf.tmpl
|
|
||||||
|
|
||||||
WORKDIR /opt/app/packages/cp-frontend
|
|
||||||
|
|
||||||
CMD ["/bin/containerpilot"]
|
|
@ -11,7 +11,7 @@ const ConnectedMenu = connect(
|
|||||||
const deploymentGroupSlug = params.deploymentGroup;
|
const deploymentGroupSlug = params.deploymentGroup;
|
||||||
const serviceSlug = params.service;
|
const serviceSlug = params.service;
|
||||||
|
|
||||||
if ((deploymentGroupSlug || '').match(/^\~/)) {
|
if ((deploymentGroupSlug || '').match(/^~/)) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { compose, graphql, gql } from 'react-apollo';
|
import { compose, graphql } from 'react-apollo';
|
||||||
import ServicesDeleteMutation from '@graphql/ServicesDeleteMutation.gql';
|
import ServicesDeleteMutation from '@graphql/ServicesDeleteMutation.gql';
|
||||||
import { Loader, ErrorMessage } from '@components/messaging';
|
import { Loader, ErrorMessage } from '@components/messaging';
|
||||||
import { ServiceDelete as ServiceDeleteComponent } from '@components/service';
|
import { ServiceDelete as ServiceDeleteComponent } from '@components/service';
|
||||||
|
@ -176,6 +176,7 @@ const ServicesStartGql = graphql(ServicesStartMutation, {
|
|||||||
|
|
||||||
const ServiceListWithData = compose(
|
const ServiceListWithData = compose(
|
||||||
ServicesGql,
|
ServicesGql,
|
||||||
|
ServicesRestartGql,
|
||||||
ServicesStopGql,
|
ServicesStopGql,
|
||||||
ServicesStartGql,
|
ServicesStartGql,
|
||||||
ServicesGql,
|
ServicesGql,
|
||||||
|
@ -54,10 +54,6 @@ const instancesByServiceId = serviceId =>
|
|||||||
: null
|
: null
|
||||||
);
|
);
|
||||||
|
|
||||||
const serviceWidthInstancesBySlug = serviceSlug => {
|
|
||||||
const service = serviceBySlug(serviceSlug);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Apollo gql utils //
|
// Apollo gql utils //
|
||||||
|
|
||||||
const findService = (services, uuid) =>
|
const findService = (services, uuid) =>
|
||||||
@ -108,5 +104,6 @@ const processServices = (services, datacenter) => {
|
|||||||
export {
|
export {
|
||||||
deploymentGroupBySlug as deploymentGroupBySlugSelector,
|
deploymentGroupBySlug as deploymentGroupBySlugSelector,
|
||||||
serviceBySlug as serviceBySlugSelector,
|
serviceBySlug as serviceBySlugSelector,
|
||||||
processServices
|
processServices,
|
||||||
|
instancesByServiceId
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
|
import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
|
||||||
import { reducer as formReducer } from 'redux-form';
|
import { reducer as formReducer } from 'redux-form';
|
||||||
import { enableBatching } from 'redux-batched-actions';
|
|
||||||
import { ApolloClient, createNetworkInterface } from 'react-apollo';
|
import { ApolloClient, createNetworkInterface } from 'react-apollo';
|
||||||
import state from './state';
|
import state from './state';
|
||||||
import { ui } from './reducers';
|
import { ui } from './reducers';
|
||||||
@ -13,7 +12,7 @@ const GLOBAL = typeof window === 'object'
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const GQL_PORT = process.env.REACT_APP_GQL_PORT || 3000;
|
const GQL_PORT = process.env.REACT_APP_GQL_PORT || 80;
|
||||||
const GQL_HOSTNAME =
|
const GQL_HOSTNAME =
|
||||||
process.env.REACT_APP_GQL_HOSTNAME || GLOBAL.location.hostname;
|
process.env.REACT_APP_GQL_HOSTNAME || GLOBAL.location.hostname;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user