OpenWISP 2 Controller
Project description
OpenWISP 2 controller module (built using Python and the Django web-framework).
Want to help OpenWISP? Find out how to help us grow here.
Deploy it in production
An automated installer is available at ansible-openwisp2.
Dependencies
Python >= 3.6
OpenSSL
Install stable version from pypi
Install from pypi:
pip install openwisp-controller
Install development version
Install tarball:
pip install https://github.com/openwisp/openwisp-controller/tarball/master
Alternatively you can install via pip using git:
pip install -e git+git://github.com/openwisp/openwisp-controller#egg=openwisp_controller
If you want to contribute, follow the instructions in Installing for development.
Setup (integrate in an existing django project)
INSTALLED_APPS and EXTENDED_APPS (an internal openwisp2 setting) in settings.py should look like the following (ordering is important):
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
# openwisp2 admin theme
# (must be loaded here)
'openwisp_utils.admin_theme',
# all-auth
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_extensions',
# openwisp2 module
'openwisp_controller.config',
'openwisp_controller.pki',
'openwisp_controller.geo',
'openwisp_controller.connection',
'openwisp_users',
# admin
'django.contrib.admin',
# other dependencies
'sortedm2m',
'reversion',
'leaflet',
# rest framework
'rest_framework',
'rest_framework_gis',
# channels
'channels',
]
EXTENDED_APPS = ('django_netjsonconfig', 'django_x509', 'django_loci',)
Ensure you are using one of the available geodjango backends, eg:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'openwisp-controller.db',
}
}
Add openwisp_utils.staticfiles.DependencyFinder to STATICFILES_FINDERS in your settings.py:
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'openwisp_utils.staticfiles.DependencyFinder',
]
Add openwisp_utils.loaders.DependencyLoader to template loaders and openwisp_utils.admin_theme.context_processor.menu_items to context processors in the TEMPLATES setting of settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'openwisp_utils.loaders.DependencyLoader',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'openwisp_utils.admin_theme.context_processor.menu_items'
],
},
}
]
Add the following settings to settings.py:
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
ASGI_APPLICATION = 'openwisp_controller.geo.channels.routing.channel_routing'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer'
},
}
LOGIN_REDIRECT_URL = 'admin:index'
ACCOUNT_LOGOUT_REDIRECT_URL = LOGIN_REDIRECT_URL
urls.py:
from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('openwisp_controller.urls')),
]
urlpatterns += staticfiles_urlpatterns()
Signals
is_working_changed
Path: openwisp_controller.connection.signals.is_working_changed
Arguments:
instance: instance of DeviceConnection
is_working: value of DeviceConnection.is_working
old_is_working: previous value of DeviceConnection.is_working, either None (for new connections), True or False
failure_reason: error message explaining reason for failure in establishing connection
This signal is emitted every time DeviceConnection.is_working changes.
It is not triggered when the device is created for the first time.
Settings
OPENWISP_SSH_AUTH_TIMEOUT
type: |
int |
default: |
2 |
Configure timeout to wait for an authentication response when establishing a SSH connection.
OPENWISP_SSH_COMMAND_TIMEOUT
type: |
int |
default: |
30 |
Configure timeout on blocking read/write operations when executing a command in a SSH connection.
OPENWISP_SSH_CONNECTION_TIMEOUT
type: |
int |
default: |
5 |
Configure timeout for the TCP connect when establishing a SSH connection.
OPENWISP_CONNECTORS
type: |
tuple |
default: |
|
Available connector classes. Connectors are python classes that specify ways in which OpenWISP can connect to devices in order to launch commands.
OPENWISP_UPDATE_STRATEGIES
type: |
tuple |
default: |
|
Available update strategies. An update strategy is a subclass of a connector class which defines an update_config method which is in charge of updating the configuratio of the device.
This operation is launched in a background worker when the configuration of a device is changed.
It’s possible to write custom update strategies and add them to this setting to make them available in OpenWISP.
OPENWISP_CONFIG_UPDATE_MAPPING
type: |
dict |
default: |
|
A dictionary that maps configuration backends to update strategies in order to automatically determine the update strategy of a device connection if the update strategy field is left blank by the user.
Installing for development
Install the system dependencies:
sudo apt install -y sqlite3 libsqlite3-dev openssl libssl-dev
sudo apt install -y gdal-bin libproj-dev libgeos-dev libspatialite-dev libsqlite3-mod-spatialite
Launch Redis:
docker-compose up -d redis
Install your forked repo:
git clone git://github.com/<your_fork>/openwisp-controller
cd openwisp-controller/
python setup.py develop
Install development dependencies (optional):
./install-dev.sh
Create database:
cd tests/
./manage.py migrate
./manage.py createsuperuser
Launch celery worker (for background jobs):
celery -A openwisp2 worker -l info
Launch development server:
./manage.py runserver 0.0.0.0:8000
You can access the admin interface at http://127.0.0.1:8000/admin/.
Run tests with:
./run-qa-checks
./runtests.py
Install and run on docker
Build from the Dockerfile:
docker-compose build
Run the docker container:
docker-compose up
Troubleshooting Steps
You may encounter some issues while installing GeoDjango.
Unable to load SpatiaLite library extension?
If you are getting below exception:
django.core.exceptions.ImproperlyConfigured: Unable to load the SpatiaLite library extension
then, You need to specify SPATIALITE_LIBRARY_PATH in your settings.py as explained in django documentation regarding how to install and configure spatialte.
Having Issues with other geospatial libraries?
Please refer troubleshooting issues related to geospatial libraries.
Talks
Contributing
Please read the OpenWISP contributing guidelines and also keep in mind the following:
Announce your intentions in the OpenWISP Mailing List
Fork this repo and install it
Write code
Write tests for your code
Ensure all tests pass
Ensure test coverage does not decrease
Document your changes
Send pull request
Changelog
See CHANGES.
License
See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file openwisp-controller-0.7.tar.gz
.
File metadata
- Download URL: openwisp-controller-0.7.tar.gz
- Upload date:
- Size: 72.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d549319caf92a894a9250a8d09f517c64c28456fa6773c242e1c816a69ec7e2 |
|
MD5 | 824e27c8b889bf2fdcaa7f26ed7f74e6 |
|
BLAKE2b-256 | 6610dc24cbc616a4598b83deac0c140c1a2325d52af209377b1d8f883f399e4a |
File details
Details for the file openwisp_controller-0.7-py2.py3-none-any.whl
.
File metadata
- Download URL: openwisp_controller-0.7-py2.py3-none-any.whl
- Upload date:
- Size: 106.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.7.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd3ba44322eba3368ab8ddd862fea9c1e58731a932d7f31e9059af0f533be596 |
|
MD5 | 0d46ed7ceaf520a4d1b7d846187f00cc |
|
BLAKE2b-256 | e1502914827087b44e51cbcfa4377922a212a4a05a1cf212e3b01db82b581d71 |