> INCOMING CONNECTION
> DIALING .......... NO ANSWER
NO CARRIER
NOT IN SERVICE
There is nothing here.
There is nothing to see.
Staying here might be dangerous. Your IP is logged.
Close this tab.
#!/usr/bin/env bash
# check-carrier.sh · telco-gateway · prod-eu-1
# last run: 2026-08-24 05:57 UTC · exit 3 (NO CARRIER)
set -euo pipefail
GATEWAY="10.4.2.17:8443"
NS="telco"
echo ">> probing gateway ${GATEWAY} ..."
curl -fsSk "https://${GATEWAY}/api/v1/lines/70001/status" \
-H "Authorization: Bearer ${LINE_API_KEY}" \
| jq -r '.status' || echo "no response"
POD=$(kubectl -n "${NS}" get pods \
-l app=telco-gateway -o jsonpath='{.items[0].metadata.name}')
echo ">> active pod: ${POD}"
kubectl -n "${NS}" logs "${POD}" --tail=25 \
| grep -E "DEGRADED|NO CARRIER"
if ! kubectl -n "${NS}" get endpoints telco-gateway \
| grep -q 10.4; then
echo "WARN: no ready endpoints on telco-gateway" >&2
fi
kubectl -n "${NS}" top pod "${POD}" --no-headers || true
echo ">> dialing test line 70001 ..."
OUT=$(curl -fsSk -X POST "https://${GATEWAY}/api/v1/lines/70001/dial" \
-H "Content-Type: application/json" \
-d '{"caller":"ops","digits":"0011"}')
if [ $(echo "${OUT}" | jq -r '.result') != "CONNECTED" ]; then
echo "ERROR: dial failed — ${OUT}" >&2
exit 3
fi
echo "OK: line reachable"
#!/usr/bin/env bash
# check-carrier.sh · telco-gateway · prod-eu-1
# last run: 2026-08-24 05:57 UTC · exit 3 (NO CARRIER)
set -euo pipefail
GATEWAY="10.4.2.17:8443"
NS="telco"
echo ">> probing gateway ${GATEWAY} ..."
curl -fsSk "https://${GATEWAY}/api/v1/lines/70001/status" \
-H "Authorization: Bearer ${LINE_API_KEY}" \
| jq -r '.status' || echo "no response"
POD=$(kubectl -n "${NS}" get pods \
-l app=telco-gateway -o jsonpath='{.items[0].metadata.name}')
echo ">> active pod: ${POD}"
kubectl -n "${NS}" logs "${POD}" --tail=25 \
| grep -E "DEGRADED|NO CARRIER"
if ! kubectl -n "${NS}" get endpoints telco-gateway \
| grep -q 10.4; then
echo "WARN: no ready endpoints on telco-gateway" >&2
fi
kubectl -n "${NS}" top pod "${POD}" --no-headers || true
echo ">> dialing test line 70001 ..."
OUT=$(curl -fsSk -X POST "https://${GATEWAY}/api/v1/lines/70001/dial" \
-H "Content-Type: application/json" \
-d '{"caller":"ops","digits":"0011"}')
if [ $(echo "${OUT}" | jq -r '.result') != "CONNECTED" ]; then
echo "ERROR: dial failed — ${OUT}" >&2
exit 3
fi
echo "OK: line reachable"
# values.yaml · chart line-gateway v1.4.2 · prod-eu-1
# last upgrade: 2026-08-13 04:02 UTC · release status: DEGRADED (0/2 ready)
replicaCount: 2
image:
repository: ghcr.io/telco-gw/line-gateway
tag: "1.4.2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8443
env:
peer:
addr: "10.4.9.4:9200"
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
memory: 1Gi
ingress:
host: gw.telco.internal
tlsSecret: gw-telco-tls
# ---- templates/deployment.yaml ----
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "line-gateway.fullname" . }}
labels:
{{- include "line-gateway.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "line-gateway.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "line-gateway.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
env:
- name: PEER_ADDR
value: "{{ .Values.env.peer.addr }}"
readinessProbe:
httpGet:
path: /healthz
port: {{ .Values.service.port }}
initialDelaySeconds: 5
periodSeconds: 10
resources:
{{- toYaml .Values.resources | nindent 12 }}
# ---- templates/service.yaml ----
apiVersion: v1
kind: Service
metadata:
name: {{ include "line-gateway.fullname" . }}
spec:
type: {{ .Values.service.type }}
selector:
{{- include "line-gateway.selectorLabels" . | nindent 4 }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
# ---- templates/ingress.yaml ----
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "line-gateway.fullname" . }}
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- {{ .Values.ingress.host | quote }}
secretName: {{ .Values.ingress.tlsSecret }}
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ include "line-gateway.fullname" . }}
port:
number: {{ .Values.service.port }}
# values.yaml · chart line-gateway v1.4.2 · prod-eu-1
# last upgrade: 2026-08-13 04:02 UTC · release status: DEGRADED (0/2 ready)
replicaCount: 2
image:
repository: ghcr.io/telco-gw/line-gateway
tag: "1.4.2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 8443
env:
peer:
addr: "10.4.9.4:9200"
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
memory: 1Gi
ingress:
host: gw.telco.internal
tlsSecret: gw-telco-tls
# ---- templates/deployment.yaml ----
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "line-gateway.fullname" . }}
labels:
{{- include "line-gateway.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "line-gateway.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "line-gateway.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}
env:
- name: PEER_ADDR
value: "{{ .Values.env.peer.addr }}"
readinessProbe:
httpGet:
path: /healthz
port: {{ .Values.service.port }}
initialDelaySeconds: 5
periodSeconds: 10
resources:
{{- toYaml .Values.resources | nindent 12 }}
# ---- templates/service.yaml ----
apiVersion: v1
kind: Service
metadata:
name: {{ include "line-gateway.fullname" . }}
spec:
type: {{ .Values.service.type }}
selector:
{{- include "line-gateway.selectorLabels" . | nindent 4 }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
# ---- templates/ingress.yaml ----
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "line-gateway.fullname" . }}
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- {{ .Values.ingress.host | quote }}
secretName: {{ .Values.ingress.tlsSecret }}
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ include "line-gateway.fullname" . }}
port:
number: {{ .Values.service.port }}
// LineController.java · telco-gateway
// last deploy: 2026-08-11 04:12 UTC · health: DEGRADED
package it.telco.gateway.api;
@RestController
@RequestMapping("/api/v1/lines")
public class LineController {
private final LineService lines;
public LineController(LineService lines) {
this.lines = lines;
}
@GetMapping("/{lineId}/status")
public ResponseEntity<LineStatus> status(
@PathVariable String lineId) {
return lines.inspect(lineId)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity
.status(HttpStatus.SERVICE_UNAVAILABLE)
.build());
}
@PostMapping("/{lineId}/dial")
public ResponseEntity<DialResult> dial(
@PathVariable String lineId,
@RequestBody DialRequest req) {
if (!lines.isProvisioned(lineId)) {
log.warn("dial rejected, line {}", lineId);
return ResponseEntity
.status(HttpStatus.GATEWAY_UNAVAILABLE)
.build();
}
DialResult res = lines.place(req);
return ResponseEntity.ok(res);
}
@ExceptionHandler(LineNotProvisioned.class)
ResponseEntity<ProblemDetail> carrier(LineNotProvisioned ex) {
return ResponseEntity
.status(HttpStatus.SERVICE_UNAVAILABLE)
.body(ProblemDetail.of("NO CARRIER"));
}
}
// LineController.java · telco-gateway
// last deploy: 2026-08-11 04:12 UTC · health: DEGRADED
package it.telco.gateway.api;
@RestController
@RequestMapping("/api/v1/lines")
public class LineController {
private final LineService lines;
public LineController(LineService lines) {
this.lines = lines;
}
@GetMapping("/{lineId}/status")
public ResponseEntity<LineStatus> status(
@PathVariable String lineId) {
return lines.inspect(lineId)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity
.status(HttpStatus.SERVICE_UNAVAILABLE)
.build());
}
@PostMapping("/{lineId}/dial")
public ResponseEntity<DialResult> dial(
@PathVariable String lineId,
@RequestBody DialRequest req) {
if (!lines.isProvisioned(lineId)) {
log.warn("dial rejected, line {}", lineId);
return ResponseEntity
.status(HttpStatus.GATEWAY_UNAVAILABLE)
.build();
}
DialResult res = lines.place(req);
return ResponseEntity.ok(res);
}
@ExceptionHandler(LineNotProvisioned.class)
ResponseEntity<ProblemDetail> carrier(LineNotProvisioned ex) {
return ResponseEntity
.status(HttpStatus.SERVICE_UNAVAILABLE)
.body(ProblemDetail.of("NO CARRIER"));
}
}
> INCOMING CONNECTION
> DIALING .......... NO ANSWER
NOT IN SERVICE
There is nothing here.
There is nothing to see.
Staying here might be dangerous. Your IP is logged.
Close this tab.▌