Skip to content
This repository has been archived by the owner on May 26, 2021. It is now read-only.

Commit

Permalink
finish adding messaging
Browse files Browse the repository at this point in the history
  • Loading branch information
jghibiki committed Nov 6, 2018
1 parent c948f3e commit 36916c2
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 41 deletions.
102 changes: 65 additions & 37 deletions client/src/Flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
import Button from '@material-ui/core/Button';
import Checkbox from '@material-ui/core/Checkbox';
import DeviceHub from '@material-ui/icons/DeviceHub';
import Notifications from '@material-ui/icons/Notifications';
import Warning from '@material-ui/icons/Warning';
import Error from '@material-ui/icons/Error';
import BugReport from '@material-ui/icons/BugReport';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Grid from '@material-ui/core/Grid';


import { SimpleNodeModel } from "./SimpleNodeModel.js";
Expand Down Expand Up @@ -179,7 +185,12 @@ class Flow extends Component {


<div style={{"display": "flex"}}>
<div style={{ "background": "#4A4A4A", "overflowY": "scroll", "height": "85vh", "min-width": "300px"}}>
<div style={{
"background": "#4A4A4A",
"overflowY": "scroll",
"height": "85vh",
"min-width": "300px"
}}>
<div style={{ "background": "#fff"}}>
<FormControlLabel control={
<Checkbox checked={this.state.should_filter} onChange={this.handleChangeFilter} value="should_filter" />
Expand All @@ -191,61 +202,78 @@ class Flow extends Component {
{this.filterHistory().map(el=>{
return (
<div key={el.timestamp + el.environment + el.pipeline + el.step + el.state}>
{ el.type == "state_update" || el.type == undefined &&
{ (el.type === "state_update" || el.type === undefined) &&
<div style={{
"padding": "15px",
"padding": "10px 5px 10px 5px",
"borderLeft": "15px solid " + this.getStateColor(el.state),
"borderRight": "15px solid " + this.getStateColor(el.state),
"borderRight": "15px solid #757575",
"borderTop": "1px solid black",
"borderBottom": "1px solid black",
"background": "#757575",
"wordWrap": "break-word",
"maxWidth": "300px",
}}>
<div style={{ "textAlign": "left"}}>
{ this.state.should_filter &&
<b>
{el.step} &rarr; {el.state}
</b>
}
{ !this.state.should_filter &&
<b>
{el.pipeline} : {el.step} &rarr; {el.state}
</b>
}
</div>
<br/>
{(new Date(el.timestamp + "UTC")).toString().substring(0, 24)}
<Grid container spacing={16}>
<Grid item style={{"verticalAlign": "middle"}} >
<DeviceHub style={{"height": "100%"}}/>
</Grid>
<Grid item>
<div style={{ "textAlign": "left"}}>
{ this.state.should_filter &&
<b>
{el.step} &rarr; {el.state}
</b>
}
{ !this.state.should_filter &&
<b>
{el.pipeline} : {el.step} &rarr; {el.state}
</b>
}
</div>
<br/>
{(new Date(el.timestamp + "UTC")).toString().substring(0, 24)}
</Grid>
</Grid>
</div>
}
{ el.type == "message" &&
<div style={{
"padding": "15px",
"padding": "10px 5px 10px 5px",
"borderLeft": "15px solid white",
"borderRight": "15px solid white",
"borderRight": "15px solid #757575",
"borderTop": "1px solid black",
"borderBottom": "1px solid black",
"background": "#757575",
"wordWrap": "break-word",
"maxWidth": "300px",
}}>
<div style={{ "textAlign": "left"}}>
{ this.state.should_filter &&
<b>
{el.step}
</b>
}
{ !this.state.should_filter &&
<b>
{el.pipeline} : {el.step}
</b>
}
</div>
<br/>
<div dangerouslySetInnerHTML={{__html: el.message}}></div>
<br/>
<br/>
{(new Date(el.timestamp + "UTC")).toString().substring(0, 24)}
<Grid container spacing={16}>
<Grid item style={{"verticalAlign": "middle"}} >
{ (el.level == "info" || el.level == undefined ) && <Notifications style={{"height": "100%"}}/> }
{ el.level == "warn" && <Warning style={{"height": "100%"}}/> }
{ el.level == "error" && <Error style={{"height": "100%"}}/> }
{ el.level == "debug" && <BugReport style={{"height": "100%"}}/> }
</Grid>
<Grid item>
<div style={{ "textAlign": "left"}}>
{ this.state.should_filter &&
<b>
{el.step} : {el.level || "info"}
</b>
}
{ !this.state.should_filter &&
<b>
{el.pipeline} : {el.step} : {el.level || "info"}
</b>
}
</div>
<br/>
<div dangerouslySetInnerHTML={{__html: el.message}}></div>
<br/>
<br/>
{(new Date(el.timestamp + "UTC")).toString().substring(0, 24)}
</Grid>
</Grid>
</div>
}
</div>
Expand Down
18 changes: 15 additions & 3 deletions demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ def set_state(environment, pipeline, step, state, exit_state=None):
else:
requests.get(f"http://localhost:5000/notify/{environment}/{pipeline}/{step}/{state}")

def send_message(environment, pipeline, step, message):
requests.post(f"http://localhost:5000/message{environment}/{pipeline}/{step}", data={"message":message})
def send_message(environment, pipeline, step, message, level=None):
if level:
requests.post(f"http://localhost:5000/message/{environment}/{pipeline}/{step}?log_level={level}", json={"message":message})
else:
requests.post(f"http://localhost:5000/message/{environment}/{pipeline}/{step}", json={"message":message})


def reset():
Expand All @@ -34,12 +37,13 @@ def reset():
time.sleep(5)

set_state("prod", "pipeline_1", "step_2", "running")
send_message("prod", "pipeline_1", "step_2", "I am now running!")
send_message("prod", "pipeline_1", "step_2", "Pulling latest data.", "debug")
set_state("prod", "pipeline_1", "step_3a", "running")
set_state("prod", "pipeline_1", "step_3b", "running")
set_state("prod", "pipeline_1", "step_4", "running")

time.sleep(0.5)
send_message("dev", "pipeline_2", "step_2", "I am now running!")
set_state("dev", "pipeline_2", "likes hamburgers", "running")
set_state("dev", "pipeline_2", "likes hotdogs", "running")
set_state("dev", "pipeline_2", "likes chicken patties", "running")
Expand All @@ -50,6 +54,7 @@ def reset():
set_state("dev", "pipeline_2", "likes chicken patties", "no")

time.sleep(0.5)
send_message("dev", "pipeline_1", "step_2", "Pipeline 2 finished!")
set_state("dev", "pipeline_1", "step_2", "ok")


Expand All @@ -70,15 +75,22 @@ def reset():
set_state("dev", "pipeline_2", "likes mayo", "yes")

time.sleep(1)
send_message("dev", "pipeline_1", "step_3a", "A message to post #1")
time.sleep(0.25)
set_state("dev", "pipeline_1", "step_3a", "ok")
set_state("dev", "pipeline_1", "step_3b", "skipped")
time.sleep(0.25)
send_message("dev", "pipeline_1", "step_3a", "A message to post #2", "debug")
time.sleep(0.25)
send_message("dev", "pipeline_1", "step_3a", "A message to post #3", "warn")

time.sleep(1)
set_state("dev", "pipeline_2", "eating", "running")
time.sleep(3)
set_state("dev", "pipeline_2", "eating", "failed", "__QUIT__")

time.sleep(2)
send_message("dev", "pipeline_1", "step_4", "Critical error!", "error")
set_state("dev", "pipeline_1", "step_4", "failed", "__QUIT__")


Expand Down
6 changes: 5 additions & 1 deletion server/sydney.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
port = os.getenv("SYDNEY_MONGO_PORT", "27017")
db_user = os.getenv("SYDNEY_MONGO_USER", None)
db_pass = os.getenv("SYDNEY_MONGO_PASSWORD", None)
auth_db = os.getenv("SYDNEY_MONGO_AUTH_DB", None)
auth_db = os.getenv("SYDNEY_MONGO_AUTH_DB", "sydney")

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
Expand Down Expand Up @@ -71,6 +71,7 @@ def send_message(environment, pipeline, step):
if message is None or message == "":
return "Invalid message: message cannot be none or empty"


env = get_environment(environment)
if not env: return "Invalid environment"

Expand All @@ -80,12 +81,15 @@ def send_message(environment, pipeline, step):
step = get_step(pipeline, step)
if not step: return "Invalid step"

log_level = request.args.get("log_level", "info")

message_data = {
"type": "message",
"environment": env["name"],
"pipeline": pipeline["name"],
"step": step["name"],
"message": message,
"level": log_level,
"timestamp": str(datetime.datetime.utcnow())
}

Expand Down

0 comments on commit 36916c2

Please sign in to comment.