Skip to content

Commit 2a37164

Browse files
committed
slowtiles module
This adds a module to keep trak of slow to generate tiles The tileserver can get the list and pregenerate them
1 parent 66aaa5e commit 2a37164

File tree

8 files changed

+108
-0
lines changed

8 files changed

+108
-0
lines changed

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
django
2+
mercantile
3+
geojson
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.
4+
from .models import SlowTiles
5+
6+
admin.site.register(SlowTiles)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Generated by Django 2.2.1 on 2020-02-09 20:16
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
initial = True
10+
11+
dependencies = [
12+
('mapping', '0006_auto_20181226_1555'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='SlowTiles',
18+
fields=[
19+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('z', models.IntegerField()),
21+
('x', models.IntegerField()),
22+
('y', models.IntegerField()),
23+
('count', models.IntegerField(default=1)),
24+
('created', models.DateTimeField(auto_now_add=True)),
25+
('updated', models.DateTimeField(auto_now=True)),
26+
('server', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mapping.Server')),
27+
],
28+
options={
29+
'unique_together': {('z', 'x', 'y')},
30+
},
31+
),
32+
]

tileservermapping/slowtiles/migrations/__init__.py

Whitespace-only changes.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from django.db import models, transaction
2+
from tileservermapping.mapping.models import Server
3+
4+
5+
class SlowTiles(models.Model):
6+
z = models.IntegerField(null=False)
7+
x = models.IntegerField(null=False)
8+
y = models.IntegerField(null=False)
9+
10+
server = models.ForeignKey(Server, on_delete=models.CASCADE)
11+
12+
count = models.IntegerField(default=1)
13+
created = models.DateTimeField(auto_now_add=True)
14+
updated = models.DateTimeField(auto_now=True)
15+
16+
class Meta:
17+
unique_together = ['z', 'x', 'y']
18+
19+
def __str__(self):
20+
return "<SlowTile: {}/{}/{} c: {}>".format(self.z, self.x, self.y, self.count)
21+
22+
@staticmethod
23+
def insert(z, x, y):
24+
"""
25+
inserts a tile z/x/y into the slow tile list, or increase the counter on an existing tile
26+
:return: the current counter on this tile, or -1 if no tile server is responsible
27+
"""
28+
server = Server.get_server(z, x, y)
29+
if server == Server.objects.get(z=0, x=0, y=0):
30+
# we can not do anything on the external instance
31+
return -1
32+
with transaction.atomic():
33+
try:
34+
tile = SlowTiles.objects.get(z=z, x=x, y=y)
35+
tile.count += 1
36+
except models.ObjectDoesNotExist:
37+
tile = SlowTiles(z=z, x=x, y=y, server=server)
38+
tile.save()
39+
return tile.count
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.urls import path
2+
from .views import insert_tile, get_server_list
3+
4+
urlpatterns = [
5+
path('add/<int:z>/<int:x>/<int:y>', insert_tile, name="insert_tile"),
6+
path('server_list/<int:z>/<int:x>/<int:y>', get_server_list, name="server_list")
7+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from django.http import HttpResponse
2+
3+
from tileservermapping.mapping.models import Server
4+
from tileservermapping.slowtiles.models import SlowTiles
5+
6+
7+
def insert_tile(request, z, x, y):
8+
tile_count = SlowTiles.insert(z, x, y)
9+
if tile_count < 0:
10+
return HttpResponse("No server responsible", content_type='text', status=404)
11+
return HttpResponse("Added: {}/{}/{} Count: {}".format(z, x, y, tile_count), content_type='text')
12+
13+
14+
def get_server_list(request, z, x, y):
15+
server = Server.get_server(z, x, y)
16+
tiles = SlowTiles.objects.filter(server=server, count__gte=5)
17+
answer = ""
18+
for tile in tiles:
19+
answer += "{}/{}/{}\n".format(tile.z, tile.x, tile.y)
20+
return HttpResponse(answer, content_type='text')

tileservermapping/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@
2020
urlpatterns = [
2121
path('admin/', admin.site.urls),
2222
url(r'^mappings/', include('tileservermapping.mapping.urls')),
23+
path('slow_tiles/', include('tileservermapping.slowtiles.urls')),
2324
]

0 commit comments

Comments
 (0)