From 043197a3be87f522b6b8bd86c660d5b8ffb19fe0 Mon Sep 17 00:00:00 2001 From: Corentin Chary Date: Mon, 5 Mar 2012 14:46:34 +0100 Subject: [PATCH] euscanwww: update style, prefetch related, ... Signed-off-by: Corentin Chary --- README | 90 +++++++++++++----- TODO | 4 +- .../management/commands/update-counters.py | 2 +- euscanwww/euscan/templatetags/packages.py | 21 ++-- euscanwww/euscan/views.py | 12 ++- euscanwww/media/css/style.css | 3 +- euscanwww/media/favicon.ico | Bin 0 -> 3438 bytes euscanwww/media/img/freshness-icon.png | Bin 0 -> 3365 bytes euscanwww/media/img/gentoo-icon.png | Bin 0 -> 916 bytes euscanwww/media/img/overlay-icon.png | Bin 0 -> 558 bytes euscanwww/media/img/upstream-icon.png | Bin 0 -> 751 bytes euscanwww/templates/_base.html | 2 +- euscanwww/templates/euscan/_datatable.html | 12 +++ euscanwww/templates/euscan/_packages.html | 14 +-- euscanwww/templates/euscan/api.html | 2 +- euscanwww/templates/euscan/categories.html | 8 +- euscanwww/templates/euscan/herds.html | 8 +- euscanwww/templates/euscan/maintainers.html | 8 +- 18 files changed, 126 insertions(+), 60 deletions(-) create mode 100644 euscanwww/media/favicon.ico create mode 100644 euscanwww/media/img/freshness-icon.png create mode 100644 euscanwww/media/img/gentoo-icon.png create mode 100644 euscanwww/media/img/overlay-icon.png create mode 100644 euscanwww/media/img/upstream-icon.png diff --git a/README b/README index 8c63d94..730deb4 100644 --- a/README +++ b/README @@ -4,9 +4,16 @@ What is euscan ? dev-portage/euscan ------------------ -euscan is available in portage as a dev package (app-portage/euscan-9999). This tool allow to check if a given package/ebuild has new upstream versions or not. It will use different heuristic to scan upstream and grab new versions and related urls. +euscan is available in portage as a dev package (app-portage/euscan-9999). +This tool allow to check if a given package/ebuild has new upstream versions +or not. It will use different heuristic to scan upstream and grab new versions +and related urls. -This tool was designed to mimic debian's uscan, but there is a major difference between the two: uscan uses a specific "watch" file that describe how it should scan packages, while euscan uses only what can already be found in ebuilds. Of course, we could later add some informations in metadata.xml to help euscan do its job more efficiently. +This tool was designed to mimic debian's uscan, but there is a major +difference between the two: uscan uses a specific "watch" file that describe +how it should scan packages, while euscan uses only what can already be found +in ebuilds. Of course, we could later add some informations in metadata.xml +to help euscan do its job more efficiently. euscan heuristics are described in the "How does-it works ?" section. @@ -61,35 +68,50 @@ Upstream Version: 5.9.2 http://www.rsyslog.com/files/download/rsyslog/rsyslog-5. ### Hidden settings -You can configure some settings using the command line, but the __init__.py file of the euscan package contains more settings, including blacklists and default settings. +You can configure some settings using the command line, but the __init__.py +file of the euscan package contains more settings, including blacklists and +default settings. -Maybe we should add the ability to use /etc/euscan.conf and ~/.config/euscan/euscan.conf to override these settings. +Maybe we should add the ability to use /etc/euscan.conf and +~/.config/euscan/euscan.conf to override these settings. euscan-www: euscan as a service ------------------------------- -euscan-www is a web application that aggregates euscan results. For example there is an instance of euscan-www that monitors gentoo-x86 + some official overlays currently hosted at http://euscan.iksaif.net/ . +euscan-www is a web application that aggregates euscan results. For example +there is an instance of euscan-www that monitors gentoo-x86 + some official +overlays currently hosted at http://euscan.iksaif.net/ . -euscan-www uses django and provides some custom commands to feed the database. You can use euscan-www on you system tree, or preferably you can use a local tree to avoid messing with your system. +euscan-www uses django and provides some custom commands to feed the database. +You can use euscan-www on you system tree, or preferably you can use a local +tree to avoid messing with your system. ### Installation -Like any django web app, just start by editing settings.py and then run these two commands. +Like any django web app, just start by editing settings.py and then run +these two commands. $ python manage.py syncdb $ python manage.py migrate -Now your instance is ready, you can just run this command to browse it. If you want to host it publicly you should use a real webserver. +Now your instance is ready, you can just run this command to browse it. +If you want to host it publicly you should use a real webserver. $ python manage.py runserver -### Creating a local tree +### Creating a local tree (optional) -Create a local tree with all that portage (and layman would need). There is an example in euscanwww/scripts/local-tree/. See escan-update.sh to know what env variables you need to run any portage related command in this local tree. +Create a local tree with all that portage (and layman would need). +There is an example in euscanwww/scripts/local-tree/. See escan-update.sh +to know what env variables you need to run any portage related command in +this local tree. ### Scanning process -The scanning process is done by euscan-update.sh. You should read carefully this script, and adapt it to your needs. For example it uses gparallel to launch multiple process at a time, and you should adapt that to your number of cpu and network bandwith. +The scanning process is done by euscan-update.sh. You should read carefully +this script, and adapt it to your needs. For example it uses gparallel to +launch multiple process at a time, and you should adapt that to your number +of cpu and network bandwith. Once your euscan-update.sh is ok, just run it. @@ -97,7 +119,8 @@ Once your euscan-update.sh is ok, just run it. ### Custom Django management commands -euscan-www povides some new management commands, here is a short description of these commands. Use "help" or read euscan-update.sh to get more informations. +euscan-www povides some new management commands, here is a short description +of these commands. Use "help" or read euscan-update.sh to get more informations. #### list-packages @@ -113,7 +136,9 @@ Scan metadata and looks for homepage, maintainers and herds. #### scan-upstream -Scan upstream package. The prefered way to use this script it to first launch euscan on some packages, store the result of the file, and feed this command with the result. +Scan upstream package. The prefered way to use this script it to first launch +euscan on some packages, store the result of the file, and feed this command with +the result. #### update-counters @@ -121,31 +146,38 @@ Update statistics and rrd files. #### regen-rrds -If you deleted your rrd files, this script will use the database to regen them. +If you deleted your rrd files, this script will use the database to +regen them. How does it work ? ================== -euscan has different heuristics to scan upstream and provides multiple "handlers". First, here is a description of the generic handler. +euscan has different heuristics to scan upstream and provides multiple +"handlers". First, here is a description of the generic handler. Scanning directories -------------------- -The first thing to do is to scan directories. It's also what uscan do, but it uses a file that describe what url and regexp to use to match packages. +The first thing to do is to scan directories. It's also what uscan do, but it +uses a file that describe what url and regexp to use to match packages. -euscan uses SRC_URI and tries to find the current version (or part of this version) in the resolved SRC_URI and generate a regexp from that. +euscan uses SRC_URI and tries to find the current version (or part of this version) +in the resolved SRC_URI and generate a regexp from that. For example for app-accessibility/dash-4.10.1, SRC_URI is: mirror://gnome/sources/dasher/4.10/dasher-4.10.1.tar.bz2 euscan will scan pages based on this template: http://ftp.gnome.org/pub/gnome/sources/dasher/${0}.${1}/dasher-${PV}.tar.bz2 -Then, from that, it will scan the top-most directory that doesn't depend on the version, and try to go deeper from here. +Then, from that, it will scan the top-most directory that doesn't depend on +the version, and try to go deeper from here. Brute force ----------- -Like when scanning directories, a template of SRC_URI is built. Then euscan generate next possible version numbers, and tries to download the url generated from the template and the new version number. +Like when scanning directories, a template of SRC_URI is built. Then euscan +generate next possible version numbers, and tries to download the url generated +from the template and the new version number. For example, running euscan on portage/app-accessibility/festival-freebsoft-utils-0.6: SRC_URI is 'http://www.freebsoft.org/pub/projects/festival-freebsoft-utils/festival-freebsoft-utils-0.6.tar.gz' @@ -160,20 +192,26 @@ euscan uses blacklist for multiple purposes. ### BLACKLIST_VERSIONS -For versions that should not be checked at all. sys-libs/libstdc++-v3-3.4 is good example because it's a package which version will always be 3.4 (Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++). +For versions that should not be checked at all. sys-libs/libstdc++-v3-3.4 +is good example because it's a package which version will always be 3.4 +(Compatibility package for running binaries linked against a pre gcc 3.4 libstdc++). ### BLACKLIST_PACKAGES -Some packages are dead, but SRC_URI refers to sources that are still being updated, for example: sys-kernel/xbox-sources that uses the same sources as vanilla-sources but is not updated the same way. +Some packages are dead, but SRC_URI refers to sources that are still being +updated, for example: sys-kernel/xbox-sources that uses the same sources as +vanilla-sources but is not updated the same way. ### SCANDIR_BLACKLIST_URLS -For urls that are not browsable. mirror://gentoo/ is a good example: it's both stupid to scan it and very long/expensive. +For urls that are not browsable. mirror://gentoo/ is a good example: it's +both stupid to scan it and very long/expensive. ### BRUTEFORCE_BLACKLIST_PACKAGES and BRUTEFORCE_BLACKLIST_URLS -Disable brute force on those packages and urls. Most of the time it's because upstream is broken and will answer HTTP 200 even if the file doesn't exist. +Disable brute force on those packages and urls. Most of the time it's because +upstream is broken and will answer HTTP 200 even if the file doesn't exist. ### ROBOTS_TXT_BLACKLIST_DOMAINS @@ -184,11 +222,13 @@ Site handlers ### Pecl/PEAR -A site handler that uses the Pecl/PEAR rest API (http://pear.php.net/manual/en/core.rest.php). +A site handler that uses the Pecl/PEAR rest API +(http://pear.php.net/manual/en/core.rest.php). ### Rubygems -This one uses rubygems's json API (http://guides.rubygems.org/rubygems-org-api/) +This one uses rubygems's json API +(http://guides.rubygems.org/rubygems-org-api/) ### Pypy diff --git a/TODO b/TODO index 0b5e801..763c90f 100644 --- a/TODO +++ b/TODO @@ -30,11 +30,13 @@ Site Handlers euscanwww --------- +- quick install doc +- sort verions on package page +- export a sqlite database - add last scan in the footer [0.2.0] - add an /about/config page that describe the current config (overlays, stuff in make.conf, euscan default settings, etc..) [0.2.0] - add a table for overlays, change euscan_versions [0.2.0] - rss scan world + post ? -- sort verions on package page ### Commands [0.2.0] diff --git a/euscanwww/euscan/management/commands/update-counters.py b/euscanwww/euscan/management/commands/update-counters.py index 50c1d5c..b719677 100644 --- a/euscanwww/euscan/management/commands/update-counters.py +++ b/euscanwww/euscan/management/commands/update-counters.py @@ -115,7 +115,7 @@ class Command(BaseCommand): package.n_packaged = n_packaged.get(package.id, 0) package.n_overlay = n_overlay.get(package.id, 0) - default = {'id' : -1} + default = {'id' : None} package.last_version_gentoo_id = last_versions_gentoo.get(package.id, default)['id'] package.last_version_overlay_id = last_versions_overlay.get(package.id, default)['id'] package.last_version_upstream_id = last_versions_upstream.get(package.id, default)['id'] diff --git a/euscanwww/euscan/templatetags/packages.py b/euscanwww/euscan/templatetags/packages.py index f953293..520a1fc 100644 --- a/euscanwww/euscan/templatetags/packages.py +++ b/euscanwww/euscan/templatetags/packages.py @@ -2,14 +2,17 @@ from django import template register = template.Library() -@register.inclusion_tag('euscan/_packages.html') -def packages(packages): - return { 'packages' : packages } +@register.inclusion_tag('euscan/_packages.html', takes_context=True) +def packages(context, packages): + context['packages'] = packages + return context -@register.inclusion_tag('euscan/_package_cols.html') -def package_cols(infos): - return { 'infos' : infos } +@register.inclusion_tag('euscan/_package_cols.html', takes_context=True) +def package_cols(context, infos): + context['infos'] = infos + return context -@register.inclusion_tag('euscan/_package_bar.html') -def package_bar(infos): - return { 'infos' : infos } +@register.inclusion_tag('euscan/_package_bar.html', takes_context=True) +def package_bar(context, infos): + context['infos'] = infos + return context diff --git a/euscanwww/euscan/views.py b/euscanwww/euscan/views.py index 5cb2c9e..c96ce20 100644 --- a/euscanwww/euscan/views.py +++ b/euscanwww/euscan/views.py @@ -20,7 +20,12 @@ def index(request): ctx['n_packages'] = Package.objects.count() ctx['n_herds'] = Herd.objects.count() ctx['n_maintainers'] = Maintainer.objects.count() - ctx['last_scan'] = EuscanResult.objects.get(id=EuscanResult.objects.aggregate(Max('id'))['id__max']).datetime + + try: + ctx['last_scan'] = EuscanResult.objects.get(id=EuscanResult.objects.aggregate(Max('id'))['id__max']).datetime + except EuscanResult.DoesNotExist: + ctx['last_scan'] = None + return ctx @render_to('euscan/logs.html') @@ -37,7 +42,8 @@ def categories(request): @render_to('euscan/category.html') def category(request, category): - packages = Package.objects.filter(category=category).select_related('last_version_gentoo', 'last_version_overlay', 'last_version_upstream') + packages = Package.objects.filter(category=category) + packages = packages.select_related('last_version_gentoo', 'last_version_overlay', 'last_version_upstream') print dir(packages[0]) if not packages: raise Http404 @@ -56,6 +62,7 @@ def herds(request): def herd(request, herd): herd = get_object_or_404(Herd, herd=herd) packages = Package.objects.filter(herds__id=herd.id) + packages = packages.select_related('last_version_gentoo', 'last_version_overlay', 'last_version_upstream') return { 'herd' : herd, 'packages' : packages } @render_to('euscan/maintainers.html') @@ -72,6 +79,7 @@ def maintainers(request): def maintainer(request, maintainer_id): maintainer = get_object_or_404(Maintainer, id=maintainer_id) packages = Package.objects.filter(maintainers__id=maintainer.id) + packages = packages.select_related('last_version_gentoo', 'last_version_overlay', 'last_version_upstream') return { 'maintainer' : maintainer, 'packages' : packages } @render_to('euscan/overlays.html') diff --git a/euscanwww/media/css/style.css b/euscanwww/media/css/style.css index 22d2c5f..7ac69a3 100644 --- a/euscanwww/media/css/style.css +++ b/euscanwww/media/css/style.css @@ -78,7 +78,7 @@ a:hover, a:active .menu { width:100%; - margin-top: 75px; + margin-top: 30px; background: #8076A1; color: #FFF; } @@ -195,6 +195,7 @@ td th { + font-size: 0.8em; text-align: center; border-bottom: 3px solid; } diff --git a/euscanwww/media/favicon.ico b/euscanwww/media/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4d4e9fb2119bad9912e6d7ac2e7529e75be43f63 GIT binary patch literal 3438 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 literal 0 HcmV?d00001 diff --git a/euscanwww/media/img/upstream-icon.png b/euscanwww/media/img/upstream-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..862134de2e49a6b7c6bf3caea941c8bad7d88c72 GIT binary patch literal 751 zcmV;q>Ns@54uCbApJ_inBL*kEwrkfWk zE0JIbEq~o1aZdJ5-;Q*T*mQ�z5f2gFtY+>2}rW%0vK_FHFPq`AUy~8H_ep50D<} z!CXA3d+ozILjY{sflgxoP>^#)>ajcu_wRyfOV|Klfms$j?lj2KN@&s(7ls8ytfUP9 zbdWI%?cILJvLx!~@hwNenWI^_tUbo1x(dgFLU0ALA|o0Jk^oQ&Fd2ilq(}f_Jz&@b zWAX!B8bh}C1VLp=PQ{Prx9A(4y_FZwfIb;iLR;q-0p{*=CzzCklWD_9PS1quE=Odv z8uLLLmTgDQJ?g1B`!Mc-4Z|?uJyslTA1{F*Om@NkSdWy#Log=lVd^QE3;ab}|5P;{ z3B^6&y)&7O_TD}bJ?f!K01c<6`>`b>A7*$CMp%WpWT3pjQ|qlcUK{s-XRypn?90m# z@fF&ZDY`{do?r;PYlXTk6`92ckY2DCV?BfTIq>Hb*UC{3s9m}#I>D!HNx0Xw8}~ai z@Vl%Rt$}>FbF%2PhN0$eeC`^3T5_%T{Avl@0}{G6r($t=7D>q(t`v& zUeV&8>5CZ{2P`ixbi8@rS>mj@2)vCtT)3#c#Db%Q4qyFNM%x3t+O>b8v~rzuY3;`P h!=(8&(QW)MzyMGUCjFEKVCVn<002ovPDHLkV1ka$R3`uc literal 0 HcmV?d00001 diff --git a/euscanwww/templates/_base.html b/euscanwww/templates/_base.html index fa52f67..36b8420 100644 --- a/euscanwww/templates/_base.html +++ b/euscanwww/templates/_base.html @@ -42,7 +42,7 @@
  • ---
  • {% block menu_feed %}
  • - feed + feed Global Feed
  • {% endblock %} diff --git a/euscanwww/templates/euscan/_datatable.html b/euscanwww/templates/euscan/_datatable.html index 6d4d53c..72f5056 100644 --- a/euscanwww/templates/euscan/_datatable.html +++ b/euscanwww/templates/euscan/_datatable.html @@ -21,3 +21,15 @@ }); {% endblock %} + +{% block menus %} +{{ block.super }} + +{% endblock %} diff --git a/euscanwww/templates/euscan/_packages.html b/euscanwww/templates/euscan/_packages.html index 6263c58..2855af1 100644 --- a/euscanwww/templates/euscan/_packages.html +++ b/euscanwww/templates/euscan/_packages.html @@ -6,13 +6,13 @@ - - - - - - - + + + + + + + {% for package in packages %} diff --git a/euscanwww/templates/euscan/api.html b/euscanwww/templates/euscan/api.html index 2bbf5b6..cdd80c4 100644 --- a/euscanwww/templates/euscan/api.html +++ b/euscanwww/templates/euscan/api.html @@ -12,7 +12,7 @@
  • /api/1.0/categories.json
  • /api/1.0/packages/by-maintainer/<maintainer-id>.json
  • /api/1.0/packages/by-category/<category>.json
  • -
  • /api/1.0/packages/by-herds/<herd>.json
  • +
  • /api/1.0/packages/by-herd/<herd>.json
  • /api/1.0/package/<category>/<package>.json
  • diff --git a/euscanwww/templates/euscan/categories.html b/euscanwww/templates/euscan/categories.html index 1e8b625..ec8e57e 100644 --- a/euscanwww/templates/euscan/categories.html +++ b/euscanwww/templates/euscan/categories.html @@ -12,10 +12,10 @@
    PackageGentooOverlayUpstreamGentooOverlaysUnpackagedFreshnessgentoooverlaysupstreamgentoooverlaysupstream
    - - - - + + + + {% if request.GET.extras %} {% endif %} diff --git a/euscanwww/templates/euscan/herds.html b/euscanwww/templates/euscan/herds.html index 1f33807..6c4e853 100644 --- a/euscanwww/templates/euscan/herds.html +++ b/euscanwww/templates/euscan/herds.html @@ -11,10 +11,10 @@
    CategoryGentooOverlaysUnpackagedFreshnessgentoooverlaysupstreamGraphs
    - - - - + + + + {% if request.GET.extras %} {% endif %} diff --git a/euscanwww/templates/euscan/maintainers.html b/euscanwww/templates/euscan/maintainers.html index bc07ae5..63aaf16 100644 --- a/euscanwww/templates/euscan/maintainers.html +++ b/euscanwww/templates/euscan/maintainers.html @@ -11,10 +11,10 @@
    HerdGentooOverlaysUnpackagedFreshnessgentoooverlaysupstreamGraphs
    - - - - + + + + {% if request.GET.extras %} {% endif %}
    MaintainerGentooOverlaysUnpackagedFreshnessgentoooverlaysupstreamGraphs