Small SAP Talk. Удобный способ мониторинга различных API на iOS

Small SAP Talk. Мониторинг различных API на iOS

Недавно я совершенно случайно узнал о таком инструменте, как Scriptable. Это приложение позволяет создавать на iPhone так называемые виджеты, которые можно использовать для мониторинга работоспобности различных приложений и API без долгого и трудоёмкого процесса разработки нативного мобильного приложения.

Что такое Scriptable?

Scriptable — это приложение для iOS, которое позволяет писать и выполнять JS код прямо на устройстве и интегрировать его с нативными возможностями iOS.

С его помощью можно:

  • Создавать собственные виджеты для домашнего экрана
  • Выполнять REST API-запросы
  • Отображать динамические данные
  • Автоматизировать небольшие повседневные задачи
См. https://scriptable.app/

Почему это может быть полезно?

Среди множества облачных сервисов, API и распределённых систем разработчикам часто приходится переключаться между консолями, дэшбордами и прочими инструментами мониторинга. Иногда хочется просто быстро взглянуть на экран телефона и получить ответ на вопрос:

Нужно ли начинать беспокоиться, или всё работает нормально?

И желательно без лишних телодвижений (логинов, токенов и прочего).

Сценарий

Представим, что у нас есть приложение, развернутое в среде Cloud Foundry в нашем аккаунте SAP BTP.

См. Deploying JAVA Spring Boot Application to the SAP BTP Cloud Foundry Instance

Для демонстрации в этой заметке я буду использовать приложение из серии Hello World со следующим исходным кодом:

const express = require("express");
const app = express();

const port = process.env.PORT || 3000;

app.get("/", (req, res) => {
  console.log(`Request received at ${new Date().toISOString()}`);
  res.send("Demo-1 app is running");
});

app.get("/status", (req, res) => {
  res.json({
    status: "UP",
    ts: new Date().toISOString(),
  });
});

app.listen(port, () => {
  console.log(`App started on port ${port}`);
});

Результат работы данного приложения представлен на видеофрагменте ниже.

0:00
/0:15

Постановка проблемы

Даже для небольшого сервиса или приложения время от времени вы можете задаваться вопросами:

  • Работает ли приложение?
  • Доступен ли endpoint?
  • Не сломалось ли что-нибудь?

Если мы говорим про платформу BTP, можно открыть BTP Cockpit, или использовать CLI, но это далеко не самый быстрый способ, когда вы не за ноутбуком. Вместо разработки нативного iOS-приложения для мониторинга можно использовать возможности Scriptable и создать виджет, который:

• Вызывает endpoint /status приложения
• Анализирует ответ
• Отображает текущий статус

Ну а благодаря современным AI-инструментам, создание такого скрипта становится почти тривиальной задачей. Достаточно описать, что именно вам нужно, и…

Спустя мгновение вы получаете готовый код.

const APP_URL = "https://YOUR-URL-TO-THE-APP/"


const TIMEOUT_MS = 4000;

async function fetchStatus() {
  const req = new Request(APP_URL);
  req.timeoutInterval = TIMEOUT_MS;
  req.method = "GET";
  req.headers = { "Accept": "application/json" };

  try {
    const res = await req.loadJSON();
    return { ok: true, data: res };
  } catch (e) {
    return { ok: false, err: String(e) };
  }
}

function buildWidget(title, statusLine, detailLine, ok) {
  const w = new ListWidget();
  w.setPadding(14, 14, 14, 14);

  const t = w.addText(title);
  t.font = Font.semiboldSystemFont(14);

  w.addSpacer(10);

  const s = w.addText(statusLine);
  s.font = Font.boldSystemFont(24);

  w.addSpacer(6);

  const d = w.addText(detailLine);
  d.font = Font.systemFont(12);
  d.textOpacity = 0.8;

  w.backgroundColor = ok ? new Color("1c3d1c") : new Color("3d1c1c");

  return w;
}

const check = await fetchStatus();
const now = new Date();
const timeStr = now.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });

let widget;
if (check.ok) {
  const status = (check.data.status || "UP").toString();
  widget = buildWidget(
    "DemoApp-1 Status",
    status,
    `Last check: ${timeStr}`,
    true
  );
} else {
  widget = buildWidget(
    "DemoApp-1 Status",
    "DOWN",
    `Last check: ${timeStr}`,
    false
  );
}

if (config.runsInWidget) {
  Script.setWidget(widget);
} else {
  await widget.presentSmall();
}

Script.complete();

Финальные шаги

Добавьте виджет на экран устройства и используйте его для быстрого мониторинга состояния вашего сервиса.

Отметьте, насколько вы бесподобны и восхитительны сегодня!

P.S.

Олег, спасибо вам за идею для заметки! Вы неотразимы!


Все, что нужно знать про рубрику Small SAP Talk представлено в следующей заметке:

См. Small SAP Talk