Skip to content
Mikhail Chuprysnki edited this page Oct 12, 2018 · 3 revisions

Welcome to the hspace wiki!

Описание проекта на самом сайте: http://hackerspace.by/projects/8

Интерфейс сайта


Статические страницы:


Юзеры и проекты:

Юзеры могут логиниться в систему и создавать/редактировать описание проектов.
Проекты могут быть public - тогда их может редактировать любой авторизованный юзер.
Или не public - тогда его может редактировать только создатель.
Статус проекта - произвольная строка.
Описание проекта - html или markdown.


CSS

В качестве основы для внешнего вида взят Bootstrap Framework v3. Если вам надо что-то поменять на странице или добавить что-то из элементов, посмотрите сначала стандартные решения и классы этого фреймворка. Не стоит заново изобретать велосипед.


Deploy

Для деплоя на боевой сервер необходимо, чтобы public key деплоящего был в authorized_keys на сервере. Иначе никак.

Запуск деплоя - mina deploy. Посмотреть в rails console на боевом сервере без коннекта по ssh – mina console.

Сам процесс описан в файле config/deploy.rb

Если очень просто, то внутри происходит следующее:

  1. Скрипт заходит на сервер, через git pull и стягивает последнюю версию из master.
  2. Устанавливаются все новые gems и запускаются миграции базы, если есть, что устанавливать и запускать.
  3. Перезапускает веб серверы nginx и puma, чтобы подхватить новые изменения.
  4. Если что-то пошло не так, откатывает всё назад.
  5. Каждая новая версия устанавливается в новую папку с номером == номер предыдущей + 1.
  6. При успешном деплое на свежую папку симлинкается папка current
  7. Логи, файл кофигурации базы, картинки проектов и прочие shared вещи хранятся в единой папке shared, она при каждом новом деплое не меняется.

SpaceAPI

Целью SpaceAPI является определение единой спецификации для хакерспейсов которая может быть использована, чтобы предоставлять информацию веб-приложениям или любым другим приложениям.


JSON API


Device API

Общая идея

Решение двух видов задач:

  1. Сбор, хранение и предоставление данных генерируемых устройствами внутри хакерспейса.
    Устройство - клиент, сайт - сервер.
  2. Асинхронный доступ к API устройств расположенных внутри хакерспейса.
    Устройство - сервер, сайт по отношению к устройству - клиент, сайт по отношению к пользователю - прокси.

На данный момент реализован первый вариант (Устройство - клиент, сайт - сервер).

Принцип работы

Устройства, у которых есть имя (name) и пароль (password), посылают на сайт запросы создать запись о событии с содержимым в виде ключ-значение, только в нашем случае event_type и value.

Создание / регистрация нового устройства (name+password)
Создание / регистрация нового события (event_type)
Логгирование событий
  • hackerspace.by/events/add - добавление записи в лог

Добавление событий через GET:
http://localhost:3000/events/add?name=device1&password=111111&event_type=light&value=on
curl http://localhost:3000/events/add\?name\=device1\&password\=111111\&event_type\=light\&value\=on
Создается событие, либо выводится exception.
Если login/pass неправильные, вернет 401 вместо 200.

Получение данных о событиях (чтение логов)
  • hackerspace.by/events - просмотр последних записей лога
  • hackerspace.by/events.csv - все записи лога
  • hackerspace.by/devices/[0-9]+ - просмотр последних событий конкретного устройства в folded формате (будет отображаться только смена состояний).

данные можно получить в альтернативных форматах:

  • hackerspace.by/devices/[0-9]+.json
  • hackerspace.by/devices/[0-9]+.csv