Browse Source

Make charts assignment to subscribers username instead of ip address.

DANGER: This is not compatible with old statistics data in DB.
Also was little bit fixes. And fix warnings for next versions of Django.
devel
Dmitry Novikov 8 years ago
parent
commit
374acb7f6e
  1. 11
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 14
      abonapp/models.py
  3. 27
      abonapp/templates/abonapp/charts.html
  4. 2
      abonapp/urls.py
  5. 4
      abonapp/views.py
  6. 2
      accounts_app/urls.py
  7. 2
      agent/netflow/start_netflow.sh
  8. 6
      chatbot/models.py
  9. 3
      clientsideapp/urls.py
  10. 2
      devapp/models.py
  11. 3
      devapp/urls.py
  12. 3
      dialing_app/urls.py
  13. 3
      mapapp/urls.py
  14. 16
      msg_app/models.py
  15. 2
      msg_app/templates/msg_app/chat.html
  16. 3
      msg_app/urls.py
  17. 2
      searchapp/urls.py
  18. 6
      static/css/custom.css
  19. 10
      statistics/models.py
  20. 3
      statistics/urls.py
  21. 1
      tariff_app/urls.py
  22. 6
      taskapp/models.py
  23. 3
      taskapp/urls.py

11
abonapp/locale/ru/LC_MESSAGES/django.po

@ -300,10 +300,6 @@ msgstr "График использования"
msgid "Static info was Not found"
msgstr "Статистика не найдена"
#: templates/abonapp/charts.html:51
msgid "Graphs by dates"
msgstr "Графики по датам"
#: templates/abonapp/debtors.html:9
msgid "Debtors"
msgstr "Должники"
@ -992,3 +988,10 @@ msgstr "Звонки"
msgid "No have ip"
msgstr "Нет ip адреса"
#, python-format
msgid "Graph of use by %(wantdate_d)s"
msgstr "График использования за %(wantdate_d)s"
msgid "Show graph by date"
msgstr "Показать график по дате"

14
abonapp/models.py

@ -36,9 +36,9 @@ class AbonGroup(models.Model):
class AbonLog(models.Model):
abon = models.ForeignKey('Abon')
abon = models.ForeignKey('Abon', models.CASCADE)
amount = models.FloatField(default=0.0)
author = models.ForeignKey(UserProfile, related_name='+')
author = models.ForeignKey(UserProfile, models.CASCADE, related_name='+')
comment = models.CharField(max_length=128)
date = models.DateTimeField(auto_now_add=True)
@ -53,7 +53,7 @@ class AbonLog(models.Model):
class AbonTariff(models.Model):
tariff = models.ForeignKey(Tariff, related_name='linkto_tariff')
tariff = models.ForeignKey(Tariff, models.CASCADE, related_name='linkto_tariff')
# время начала действия услуги
time_start = models.DateTimeField(null=True, blank=True, default=None)
@ -86,7 +86,7 @@ class AbonTariff(models.Model):
class AbonStreet(models.Model):
name = models.CharField(max_length=64)
group = models.ForeignKey(AbonGroup)
group = models.ForeignKey(AbonGroup, models.CASCADE)
def __str__(self):
return self.name
@ -289,7 +289,7 @@ class PassportInfo(models.Model):
class InvoiceForPayment(models.Model):
abon = models.ForeignKey(Abon)
abon = models.ForeignKey(Abon, models.CASCADE)
status = models.BooleanField(default=False)
amount = models.FloatField(default=0.0)
comment = models.CharField(max_length=128)
@ -363,7 +363,7 @@ class AllPayLog(models.Model):
class AbonRawPassword(models.Model):
account = models.OneToOneField(Abon, primary_key=True)
account = models.OneToOneField(Abon, models.CASCADE, primary_key=True)
passw_text = models.CharField(max_length=64)
def __str__(self):
@ -374,7 +374,7 @@ class AbonRawPassword(models.Model):
class AdditionalTelephone(models.Model):
abon = models.ForeignKey(Abon, related_name='additional_telephones')
abon = models.ForeignKey(Abon, models.CASCADE, related_name='additional_telephones')
telephone = models.CharField(
max_length=16,
verbose_name=_('Telephone'),

27
abonapp/templates/abonapp/charts.html

@ -3,14 +3,22 @@
{% block content %}
<div class="row">
<div class="col-sm-10">
<div class="col-sm-12">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Graph of use' %}</h3>
<h3 class="panel-title">{% blocktrans with wantdate_d=wantdate|date:'j E Y' %}Graph of use by {{ wantdate_d }}{% endblocktrans %}</h3>
</div>
<div class="panel-body">
{% if charts_data %}
<div id="chrt"></div>
<form action="{% url 'abonapp:charts' abon_group.pk abon.pk %}" method="get" class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-calendar"></span> {% trans 'Show graph by date' %}
</button>
</span>
<input type="text" class="form-control" placeholder="{% trans 'Choose a date' %}" id="date_choose" name="wantdate" value="{{ wantdate|date:'dmY' }}">
</form>
<script type="text/javascript">
$(document).ready(function ($) {
new Chartist.Line('#chrt', {
@ -38,6 +46,9 @@
tension: 0
})
});
$('#date_choose').datetimepicker({
format: 'DDMMYYYY'
});
});
</script>
{% else %}
@ -46,18 +57,6 @@
</div>
</div>
</div>
<div class="col-sm-2">
<div class="panel panel-default">
<div class="panel-heading">{% trans 'Graphs by dates' %}</div>
<div class="list-group">
{% for dat in dates %}
<a href="{% url 'abonapp:charts' abon_group.pk abon.pk %}?wantdate={{ dat|date:'dmY' }}" class="list-group-item{% if dat == now %} active{% endif %}">{{ dat|date:'j E' }}</a>
{% empty %}
{% trans 'Static info was Not found' %}
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}

2
abonapp/urls.py

@ -3,6 +3,8 @@ from django.conf.urls import url, include
from . import views
app_name = 'abonapp'
urlpatterns = [
url(r'^$', views.grouplist, name='group_list'),

4
abonapp/views.py

@ -581,7 +581,7 @@ def charts(request, gid, uid):
charts_data = None
else:
charts_data = StatElem.objects.chart(
abon.ip_address,
abon.username,
count_of_parts=30,
want_date=wandate
)
@ -608,7 +608,7 @@ def charts(request, gid, uid):
'abon': abon,
'charts_data': ',\n'.join(charts_data) if charts_data is not None else None,
'high': high,
'dates': get_dates()
'wantdate': wandate
})

2
accounts_app/urls.py

@ -4,6 +4,8 @@ from django.conf.urls import url
from . import views
app_name = 'account_app'
urlpatterns = [
url(r'^login/', views.to_signin, name='login'),

2
agent/netflow/start_netflow.sh

@ -2,5 +2,5 @@
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
flow-capture -R /var/www/djing/agent/netflow/netflow_handler.sh -p /run/flow.pid -w /tmp/djing_flow -n1 -N0 0/0/6343
flow-capture -R /var/www/djing/agent/netflow/netflow_handler.py -p /run/flow.pid -w /tmp/djing_flow -n1 -N0 0/0/6343

6
chatbot/models.py

@ -10,7 +10,7 @@ class ChatException(Exception):
class TelegramBot(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_('Employee'))
user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Employee'))
chat_id = models.PositiveIntegerField(_('Telegram chat id'), default=0)
def __str__(self):
@ -23,7 +23,7 @@ class TelegramBot(models.Model):
class MessageHistory(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL)
user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE)
message = models.CharField(max_length=255)
date_sent = models.DateTimeField(auto_now_add=True)
@ -50,7 +50,7 @@ class MessageQueueManager(models.Manager):
class MessageQueue(models.Model):
target_employee = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_('Target employee'))
target_employee = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Target employee'))
message = models.CharField(_('Message'), max_length=255)
STATUSES = (
('n', 'New'),

3
clientsideapp/urls.py

@ -3,6 +3,9 @@ from django.conf.urls import url
from . import views
app_name = 'clientsideapp'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^pays$', views.pays, name='pays'),

2
devapp/models.py

@ -132,7 +132,7 @@ class Device(models.Model):
class Port(models.Model):
device = models.ForeignKey(Device, verbose_name=_('Device'))
device = models.ForeignKey(Device, models.CASCADE, verbose_name=_('Device'))
num = models.PositiveSmallIntegerField(_('Number'), default=0)
descr = models.CharField(_('Description'), max_length=60, null=True, blank=True)

3
devapp/urls.py

@ -3,6 +3,9 @@ from django.conf.urls import url
from . import views
app_name = 'devapp'
urlpatterns = [
url(r'^$', views.group_list, name='group_list'),
url(r'^devices_without_groups$', views.devices_null_group, name='devices_null_group'),

3
dialing_app/urls.py

@ -2,6 +2,9 @@ from django.conf.urls import url
from . import views
app_name = 'dialing_app'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^filter$', views.vfilter, name='vfilter'),

3
mapapp/urls.py

@ -4,6 +4,9 @@ from django.conf.urls import url
from . import views
app_name = 'mapapp'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^options$', views.options, name='options'),

16
msg_app/models.py

@ -10,8 +10,8 @@ class MessageError(Exception):
class MessageStatus(models.Model):
msg = models.ForeignKey('Message', related_name='msg_statuses')
user = models.ForeignKey(UserProfile, related_name='usr_msg_status')
msg = models.ForeignKey('Message', models.CASCADE, related_name='msg_statuses')
user = models.ForeignKey(UserProfile, models.CASCADE, related_name='usr_msg_status')
MESSAGE_STATES = (
('new', _('New')),
('old', _('Seen')),
@ -34,8 +34,8 @@ class MessageStatus(models.Model):
class Message(models.Model):
text = models.TextField(_("Body"))
sent_at = models.DateTimeField(_("sent at"), auto_now_add=True)
author = models.ForeignKey(UserProfile, related_name='messages')
conversation = models.ForeignKey('Conversation', verbose_name=_('Conversation'))
author = models.ForeignKey(UserProfile, models.CASCADE, related_name='messages')
conversation = models.ForeignKey('Conversation', models.CASCADE, verbose_name=_('Conversation'))
attachment = models.FileField(upload_to='messages_attachments/%Y_%m_%d', blank=True, null=True)
account_status = models.ManyToManyField(UserProfile, through=MessageStatus, through_fields=('msg', 'user'))
@ -73,8 +73,8 @@ class Message(models.Model):
class ConversationMembership(models.Model):
account = models.ForeignKey(UserProfile, related_name='memberships')
conversation = models.ForeignKey('Conversation')
account = models.ForeignKey(UserProfile, models.CASCADE, related_name='memberships')
conversation = models.ForeignKey('Conversation', models.CASCADE)
PARTICIPANT_STATUS = (
('adm', _('Admin')),
('gst', _('Guest')),
@ -82,7 +82,7 @@ class ConversationMembership(models.Model):
('inv', _('Inviter'))
)
status = models.CharField(max_length=3, choices=PARTICIPANT_STATUS, default='gst')
who_invite_that_user = models.ForeignKey(UserProfile, null=True, blank=True, related_name='self_conversations')
who_invite_that_user = models.ForeignKey(UserProfile, models.CASCADE, null=True, blank=True, related_name='self_conversations')
def __str__(self):
return "%s < %s" % (self.conversation, self.account)
@ -139,7 +139,7 @@ class Conversation(models.Model):
participants = models.ManyToManyField(UserProfile, related_name='conversations',
through='ConversationMembership',
through_fields=('conversation', 'account'))
author = models.ForeignKey(UserProfile)
author = models.ForeignKey(UserProfile, models.CASCADE)
date_create = models.DateTimeField(auto_now_add=True)
def __str__(self):

2
msg_app/templates/msg_app/chat.html

@ -42,7 +42,7 @@
<small>{{ msg.sent_at|date:'d M, H:i:s' }}</small>
</h5>
<p>{{ msg.text }}</p>
<pre>{{ msg.text }}</pre>
{% if msg.attachment %}
<a href="{{ msg.attachment }}" class="btn btn-default btn-sm" target="_blank">
<span class="glyphicon glyphicon-gift"></span> {{ msg.attachment }}

3
msg_app/urls.py

@ -2,6 +2,9 @@ from django.conf.urls import url
from . import views
app_name = 'msg_app'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^new$', views.new_conversation, name='new_conversation'),

2
searchapp/urls.py

@ -3,6 +3,8 @@ from django.conf.urls import url
from . import views
app_name = 'searchapp'
urlpatterns = [
url(r'^$', views.home, name='home'),

6
static/css/custom.css

@ -275,5 +275,9 @@ div#loading>div.gif {
}
pre {border: 0; background-color: transparent;}
pre {
border: 0; background-color: transparent;
white-space: pre-wrap;
word-wrap: break-word;
}

10
statistics/models.py

@ -15,7 +15,7 @@ def get_dates():
class StatManager(models.Manager):
def chart(self, ip_addr, count_of_parts=12, want_date=date.today()):
def chart(self, username, count_of_parts=12, want_date=date.today()):
def byte_to_mbit(x):
return ((x/60)*8)/2**20
@ -28,7 +28,7 @@ class StatManager(models.Manager):
def avarage(elements):
return sum(elements) / len(elements)
charts_data = self.filter(ip=ip_addr)
charts_data = self.filter(uname=username)
charts_times = [cd.cur_time.timestamp()*1000 for cd in charts_data]
charts_octets = [cd.octets for cd in charts_data]
if len(charts_octets) > 0 and len(charts_octets) == len(charts_times):
@ -50,6 +50,7 @@ class StatManager(models.Manager):
class StatElem(models.Model):
cur_time = UnixDateTimeField(primary_key=True)
uname = models.CharField(max_length=127, blank=True, null=True, default=None)
ip = MyGenericIPAddressField()
octets = models.PositiveIntegerField(default=0)
packets = models.PositiveIntegerField(default=0)
@ -64,6 +65,10 @@ class StatElem(models.Model):
def delete(self, *args, **kwargs):
pass
@property
def table_name(self):
return self._meta.db_table
def delete_month(self):
cursor = connection.cursor()
table_name = self._meta.db_table
@ -117,6 +122,5 @@ class StatCache(models.Model):
def is_today(self):
return date.today() == self.last_time.date()
class Meta:
db_table = 'flowcache'

3
statistics/urls.py

@ -3,6 +3,9 @@ from django.conf.urls import url
from . import views
app_name = 'statistics'
urlpatterns = [
url(r'^$', views.home, name='home'),
]

1
tariff_app/urls.py

@ -2,6 +2,7 @@ from django.conf.urls import url
from . import views
app_name = 'tariff_app'
urlpatterns = [
url(r'^$', views.tarifs, name='home'),

6
taskapp/models.py

@ -39,7 +39,7 @@ TASK_TYPES = (
class ChangeLog(models.Model):
task = models.ForeignKey('Task')
task = models.ForeignKey('Task', models.CASCADE)
ACT_CHOICES = (
('e', _('Change task')),
('c', _('Create task')),
@ -49,7 +49,7 @@ class ChangeLog(models.Model):
)
act_type = models.CharField(max_length=1, choices=ACT_CHOICES)
when = models.DateTimeField(auto_now_add=True)
who = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
who = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='+')
def __str__(self):
return self.get_act_type_display()
@ -69,7 +69,7 @@ class Task(models.Model):
state = models.CharField(_('Condition'), max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0])
attachment = models.ImageField(_('Attached image'), upload_to='task_attachments/%Y.%m.%d', blank=True, null=True)
mode = models.CharField(_('The nature of the damage'), max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0])
abon = models.ForeignKey(Abon, null=True, blank=True, verbose_name=_('Subscriber'))
abon = models.ForeignKey(Abon, models.CASCADE, null=True, blank=True, verbose_name=_('Subscriber'))
class Meta:
db_table = 'task'

3
taskapp/urls.py

@ -3,6 +3,9 @@ from django.conf.urls import url
from . import views
app_name = 'taskapp'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^(?P<task_id>\d+)$', views.view, name='view'),

Loading…
Cancel
Save