Commit 45069701 authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

geodata support in element configuration

parent ff766855
Loading
Loading
Loading
Loading
+159 −14
Original line number Diff line number Diff line
@@ -52,6 +52,11 @@ import {
  FIELD_MNC,
  FIELD_DEFAULT_CELL_ID,
  FIELD_CELL_ID,
  FIELD_GEO_LOCATION,
  FIELD_GEO_RADIUS,
  FIELD_GEO_PATH,
  FIELD_GEO_EOP_MODE,
  FIELD_GEO_VELOCITY,
  FIELD_CHART_ENABLED,
  FIELD_CHART_LOC,
  FIELD_CHART_VAL,
@@ -123,6 +128,11 @@ import {
  CFG_ELEM_MCC,
  CFG_ELEM_DEFAULT_CELL_ID,
  CFG_ELEM_CELL_ID,
  CFG_ELEM_GEO_LOCATION,
  CFG_ELEM_GEO_RADIUS,
  CFG_ELEM_GEO_PATH,
  CFG_ELEM_GEO_EOP_MODE,
  CFG_ELEM_GEO_VELOCITY,
  CFG_ELEM_CHART_CHECK,
  CFG_ELEM_CHART_LOC,
  CFG_ELEM_CHART_GROUP,
@@ -134,7 +144,9 @@ import {
  CFG_BTN_CLONE_ELEM,

  // Layout type
  MEEP_COMPONENT_TABLE_LAYOUT
  MEEP_COMPONENT_TABLE_LAYOUT,
  GEO_EOP_MODE_LOOP,
  GEO_EOP_MODE_REVERSE
} from '../../meep-constants';

// ELEMENT VALIDATION
@@ -145,6 +157,7 @@ const SERVICE_NODE_PORT_MIN = 30000;
const SERVICE_NODE_PORT_MAX = 32767;
const GPU_COUNT_MIN = 1;
const GPU_COUNT_MAX = 4;
const EOP_MODES = [GEO_EOP_MODE_LOOP, GEO_EOP_MODE_REVERSE];

const validateName = val => {
  if (val) {
@@ -280,6 +293,30 @@ const validateCellularCellId = val => {
  return null;
};

const validateLocation = val => {
  if (val) {
    // TODO -- Validate location format
    try {
      JSON.parse(val);
    } catch(e) {
      return '[longitude,latitude]';
    }
  }
  return null;
};

const validateGeoPath = val => {
  if (val) {
    // TODO -- Validate location format
    try {
      JSON.parse(val);
    } catch(e) {
      return '[[longitude,latitude],...]';
    }
  }
  return null;
};

const validateExternalPort = port => {
  if (port === '') {
    return null;
@@ -409,7 +446,7 @@ const CfgTextField = props => {
    <>
      <TextField
        outlined
        style={{ width: '100%' }}
        style={{ width: '100%', marginBottom: 0 }}
        label={props.label}
        type={props.type}
        onChange={event => {
@@ -614,6 +651,7 @@ const TypeRelatedFormFields = ({ onUpdate, element }) => {
  var type = getElemFieldVal(element, FIELD_TYPE);
  var isExternal = getElemFieldVal(element, FIELD_IS_EXTERNAL);
  var chartEnabled = getElemFieldVal(element, FIELD_CHART_ENABLED);
  var eopMode = getElemFieldVal(element, FIELD_GEO_EOP_MODE) || '';

  switch (type) {
  case ELEMENT_TYPE_SCENARIO:
@@ -683,11 +721,34 @@ const TypeRelatedFormFields = ({ onUpdate, element }) => {
    );
  case ELEMENT_TYPE_POA:
    return (
      <>
        <NCGroups
          onUpdate={onUpdate}
          element={element}
          prefixes={[PREFIX_TERM_LINK]}
        />
        <Grid>
          <CfgTextFieldCell
            span={8}
            onUpdate={onUpdate}
            element={element}
            validate={validateLocation}
            label="Location Coordinates"
            fieldName={FIELD_GEO_LOCATION}
            cydata={CFG_ELEM_GEO_LOCATION}
          />
          <CfgTextFieldCell
            span={4}
            onUpdate={onUpdate}
            element={element}
            isNumber={true}
            label="Radius (m)"
            validate={validateNumber}
            fieldName={FIELD_GEO_RADIUS}
            cydata={CFG_ELEM_GEO_RADIUS}
          />
        </Grid>
      </>
    );
  case ELEMENT_TYPE_POA_CELL:
    return (
@@ -697,6 +758,27 @@ const TypeRelatedFormFields = ({ onUpdate, element }) => {
          element={element}
          prefixes={[PREFIX_TERM_LINK]}
        />
        <Grid>
          <CfgTextFieldCell
            span={8}
            onUpdate={onUpdate}
            element={element}
            validate={validateLocation}
            label="Location Coordinates"
            fieldName={FIELD_GEO_LOCATION}
            cydata={CFG_ELEM_GEO_LOCATION}
          />
          <CfgTextFieldCell
            span={4}
            onUpdate={onUpdate}
            element={element}
            isNumber={true}
            label="Radius (m)"
            validate={validateNumber}
            fieldName={FIELD_GEO_RADIUS}
            cydata={CFG_ELEM_GEO_RADIUS}
          />
        </Grid>
        <CfgTextFieldCell
          onUpdate={onUpdate}
          element={element}
@@ -708,15 +790,78 @@ const TypeRelatedFormFields = ({ onUpdate, element }) => {
      </>
    );
  case ELEMENT_TYPE_UE:
    return (
      <>
        <NCGroups
          onUpdate={onUpdate}
          element={element}
          prefixes={[PREFIX_LINK]}
        />
        <Grid>
          <CfgTextFieldCell
            span={12}
            onUpdate={onUpdate}
            element={element}
            validate={validateLocation}
            label="Location Coordinates"
            fieldName={FIELD_GEO_LOCATION}
            cydata={CFG_ELEM_GEO_LOCATION}
          />
          <CfgTextFieldCell
            span={12}
            onUpdate={onUpdate}
            element={element}
            validate={validateGeoPath}
            label="Path Coordinates"
            fieldName={FIELD_GEO_PATH}
            cydata={CFG_ELEM_GEO_PATH}
          />
          <GridCell span={6} style={{ paddingTop: 16 }}>
            <IDSelect
              label="End-of-Path Mode"
              span={12}
              options={EOP_MODES}
              onChange={elem => onUpdate(FIELD_GEO_EOP_MODE, elem.target.value, null)}
              value={eopMode}
              disabled={false}
              cydata={CFG_ELEM_GEO_EOP_MODE}
            />
          </GridCell>
          <CfgTextFieldCell
            span={6}
            onUpdate={onUpdate}
            element={element}
            validate={validateNumber}
            isNumber={true}
            label="Velocity (m/s)"
            fieldName={FIELD_GEO_VELOCITY}
            cydata={CFG_ELEM_GEO_VELOCITY}
          />
        </Grid>
      </>
    );
  case ELEMENT_TYPE_DC:
  case ELEMENT_TYPE_EDGE:
  case ELEMENT_TYPE_FOG:
    return (
      <>
        <NCGroups
          onUpdate={onUpdate}
          element={element}
          prefixes={[PREFIX_LINK]}
        />
        <Grid>
          <CfgTextFieldCell
            span={12}
            onUpdate={onUpdate}
            element={element}
            validate={validateLocation}
            label="Location Coordinates"
            fieldName={FIELD_GEO_LOCATION}
            cydata={CFG_ELEM_GEO_LOCATION}
          />
        </Grid>
      </>
    );
  case ELEMENT_TYPE_UE_APP:
    return (
@@ -1315,10 +1460,10 @@ const styles = {
    height: '100%'
  },
  block: {
    marginBottom: 10
    marginBottom: 0
  },
  field: {
    marginBottom: 10
    marginBottom: 0
  },
  button: {
    color: 'white'
+1 −4
Original line number Diff line number Diff line
@@ -135,10 +135,7 @@ class CfgPageContainer extends Component {
    }

    // Add/update element in scenario
    if (
      this.props.cfg.elementConfiguration.configurationMode ===
      CFG_ELEM_MODE_NEW
    ) {
    if (this.props.cfg.elementConfiguration.configurationMode === CFG_ELEM_MODE_NEW) {
      this.props.newScenarioElem(element, true);
    } else {
      this.props.updateScenarioElem(element);
+9 −0
Original line number Diff line number Diff line
@@ -122,6 +122,11 @@ export const CFG_ELEM_MNC = 'cfg-elem-mnc';
export const CFG_ELEM_MCC = 'cfg-elem-mcc';
export const CFG_ELEM_DEFAULT_CELL_ID = 'cfg-elem-default-cell-id';
export const CFG_ELEM_CELL_ID = 'cfg-elem-cell-id';
export const CFG_ELEM_GEO_LOCATION = 'cfg-elem-location';
export const CFG_ELEM_GEO_RADIUS = 'cfg-elem-radius';
export const CFG_ELEM_GEO_PATH = 'cfg-elem-path';
export const CFG_ELEM_GEO_EOP_MODE = 'cfg-elem-eop-mode';
export const CFG_ELEM_GEO_VELOCITY = 'cfg-elem-velocity';
export const CFG_ELEM_CHART_CHECK = 'cfg-elem-chart-check';
export const CFG_ELEM_CHART_LOC = 'cfg-elem-chart-loc';
export const CFG_ELEM_CHART_GROUP = 'cfg-elem-chart-group';
@@ -230,6 +235,10 @@ export const DEFAULT_LATENCY_DC = 0;
// GPU Types
export const GPU_TYPE_NVIDIA = 'NVIDIA';

// End-of-path modes
export const GEO_EOP_MODE_LOOP = 'LOOP';
export const GEO_EOP_MODE_REVERSE = 'REVERSE';

// Monitoring Page IDs
export const MON_DASHBOARD_SELECT = 'mon-dashboard-select';
export const MON_DASHBOARD_IFRAME = 'mon-dashboard-iframe';
+20 −50
Original line number Diff line number Diff line
@@ -64,6 +64,11 @@ export const FIELD_MCC = 'mcc';
export const FIELD_MNC = 'mnc';
export const FIELD_DEFAULT_CELL_ID = 'defaultCellId';
export const FIELD_CELL_ID = 'cellId';
export const FIELD_GEO_LOCATION = 'location';
export const FIELD_GEO_RADIUS = 'radius';
export const FIELD_GEO_PATH = 'path';
export const FIELD_GEO_EOP_MODE = 'eopMode';
export const FIELD_GEO_VELOCITY = 'velocity';
export const FIELD_CHART_ENABLED = 'userChartEnabled';
export const FIELD_CHART_LOC = 'userChartLocation';
export const FIELD_CHART_VAL = 'userChartAlternateValues';
@@ -132,66 +137,31 @@ export const createElem = name => {
  setElemFieldVal(elem, FIELD_MCC, '');
  setElemFieldVal(elem, FIELD_DEFAULT_CELL_ID, '');
  setElemFieldVal(elem, FIELD_CELL_ID, '');
  setElemFieldVal(elem, FIELD_GEO_LOCATION, '');
  setElemFieldVal(elem, FIELD_GEO_RADIUS, '');
  setElemFieldVal(elem, FIELD_GEO_PATH, '');
  setElemFieldVal(elem, FIELD_GEO_EOP_MODE, '');
  setElemFieldVal(elem, FIELD_GEO_VELOCITY, '');
  setElemFieldVal(elem, FIELD_CHART_ENABLED, false);
  setElemFieldVal(elem, FIELD_CHART_LOC, '');
  setElemFieldVal(elem, FIELD_CHART_VAL, '');
  setElemFieldVal(elem, FIELD_CHART_GROUP, '');
  setElemFieldVal(elem, FIELD_INT_DOM_LATENCY, DEFAULT_LATENCY_INTER_DOMAIN);
  setElemFieldVal(
    elem,
    FIELD_INT_DOM_LATENCY_VAR,
    DEFAULT_LATENCY_JITTER_INTER_DOMAIN
  );
  setElemFieldVal(
    elem,
    FIELD_INT_DOM_THROUGPUT,
    DEFAULT_THROUGHPUT_INTER_DOMAIN
  );
  setElemFieldVal(
    elem,
    FIELD_INT_DOM_PKT_LOSS,
    DEFAULT_PACKET_LOSS_INTER_DOMAIN
  );
  setElemFieldVal(elem, FIELD_INT_DOM_LATENCY_VAR, DEFAULT_LATENCY_JITTER_INTER_DOMAIN);
  setElemFieldVal(elem, FIELD_INT_DOM_THROUGPUT, DEFAULT_THROUGHPUT_INTER_DOMAIN);
  setElemFieldVal(elem, FIELD_INT_DOM_PKT_LOSS, DEFAULT_PACKET_LOSS_INTER_DOMAIN);
  setElemFieldVal(elem, FIELD_INT_ZONE_LATENCY, DEFAULT_LATENCY_INTER_ZONE);
  setElemFieldVal(
    elem,
    FIELD_INT_ZONE_LATENCY_VAR,
    DEFAULT_LATENCY_JITTER_INTER_ZONE
  );
  setElemFieldVal(
    elem,
    FIELD_INT_ZONE_THROUGPUT,
    DEFAULT_THROUGHPUT_INTER_ZONE
  );
  setElemFieldVal(
    elem,
    FIELD_INT_ZONE_PKT_LOSS,
    DEFAULT_PACKET_LOSS_INTER_ZONE
  );
  setElemFieldVal(elem, FIELD_INT_ZONE_LATENCY_VAR, DEFAULT_LATENCY_JITTER_INTER_ZONE);
  setElemFieldVal(elem, FIELD_INT_ZONE_THROUGPUT, DEFAULT_THROUGHPUT_INTER_ZONE);
  setElemFieldVal(elem, FIELD_INT_ZONE_PKT_LOSS, DEFAULT_PACKET_LOSS_INTER_ZONE);
  setElemFieldVal(elem, FIELD_INTRA_ZONE_LATENCY, DEFAULT_LATENCY_INTRA_ZONE);
  setElemFieldVal(
    elem,
    FIELD_INTRA_ZONE_LATENCY_VAR,
    DEFAULT_LATENCY_JITTER_INTRA_ZONE
  );
  setElemFieldVal(elem, FIELD_INTRA_ZONE_LATENCY_VAR, DEFAULT_LATENCY_JITTER_INTRA_ZONE);
  setElemFieldVal(elem, FIELD_INTRA_ZONE_THROUGPUT, DEFAULT_THROUGHPUT_INTRA_ZONE);
  setElemFieldVal(elem, FIELD_INTRA_ZONE_PKT_LOSS, DEFAULT_PACKET_LOSS_INTRA_ZONE);
  setElemFieldVal(elem, FIELD_TERM_LINK_LATENCY, DEFAULT_LATENCY_TERMINAL_LINK);
  setElemFieldVal(
    elem,
    FIELD_TERM_LINK_LATENCY_VAR,
    DEFAULT_LATENCY_JITTER_TERMINAL_LINK
  );
  setElemFieldVal(
    elem,
    FIELD_TERM_LINK_THROUGPUT,
    DEFAULT_THROUGHPUT_TERMINAL_LINK
  );
  setElemFieldVal(
    elem,
    FIELD_TERM_LINK_PKT_LOSS,
    DEFAULT_PACKET_LOSS_TERMINAL_LINK
  );
  setElemFieldVal(elem, FIELD_TERM_LINK_LATENCY_VAR, DEFAULT_LATENCY_JITTER_TERMINAL_LINK);
  setElemFieldVal(elem, FIELD_TERM_LINK_THROUGPUT, DEFAULT_THROUGHPUT_TERMINAL_LINK);
  setElemFieldVal(elem, FIELD_TERM_LINK_PKT_LOSS, DEFAULT_PACKET_LOSS_TERMINAL_LINK);
  setElemFieldVal(elem, FIELD_LINK_LATENCY, DEFAULT_LATENCY_LINK);
  setElemFieldVal(elem, FIELD_LINK_LATENCY_VAR, DEFAULT_LATENCY_JITTER_LINK);
  setElemFieldVal(elem, FIELD_LINK_THROUGPUT, DEFAULT_THROUGHPUT_LINK);
+191 −389

File changed.

Preview size limit exceeded, changes collapsed.