Giter VIP home page Giter VIP logo

monkey's Introduction

Monkey Server

Monkey is a fast and lightweight Web Server for Linux. It has been designed to be very scalable with low memory and CPU consumption, the perfect solution for Embedded Linux and high end production environments.

Besides the common features as HTTP server, it expose a flexible C API which aims to behave as a fully HTTP development framework, so it can be extended as desired through the plugins interface.

For more details please refer to the official documentation.

Features

  • HTTP/1.1 Compliant
  • Hybrid Networking Model: Asynchronous mode + fixed Threads
  • Indented configuration style
  • Versatile plugin subsystem / API
  • x86, x86_64 & ARM compatible
  • More features:
    • SSL
    • IPv6
    • Basic Auth
    • Log writer
    • Security
    • Directory Listing
    • CGI
    • FastCGI
    • Much more!
  • Embeddable as a shared library

Requirements

When building Monkey it needs:

  • CMake >= 2.8
  • Glibc >= 2.5
  • GNU C Compiler >= 3.2

Monkey requires the following components on runtime:

  • Linux Kernel >= 2.6.32
  • Pthreads support

Writing Scalable Web Services

If you are interested into use Monkey as a base platform build scalable web services, we recommend you check our Duda I/O project made for that purpose.

Join us!

Monkey is an open organization so we want to hear about you, we continue growing and you can be part of it!, you can reach us at:

If you want to get involved, please also refer to our Contributing guidelines.

Author

Eduardo Silva [email protected]

monkey's People

Contributors

astroza avatar blueness avatar braydonk avatar carlos-ghan avatar clbr avatar cosmo0920 avatar davidlohr avatar denis1990 avatar edsiper avatar f13mash avatar freyes avatar fujimotos avatar kay21s avatar kiwichris avatar ksonny avatar leonardo-albertovich avatar matthewfala avatar megabug avatar niedbalski avatar nokute78 avatar p1ng0o avatar pwhelan avatar rittneje avatar sayantanbhattacharyya avatar sourabh0612 avatar stdevel avatar swpd avatar tssavita avatar vincent-c avatar vonbrand avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monkey's Issues

Improve TOC headers (Trac #24)

Current HTTP headers are handled by a Table-Of-Content system (TOC), this TOC does not handle properly more than 11 headers

Migrated from http://bugs.monkey-project.com/ticket/24

{
    "status": "closed", 
    "changetime": "2010-11-16T12:01:23", 
    "description": "Current HTTP headers are handled by a Table-Of-Content system (TOC), this TOC does not handle properly more than 11 headers", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1289908883950317", 
    "component": "HTTP", 
    "summary": "Improve TOC headers", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-29T01:16:54", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "defect"
}

IPv4 Plugin (Trac #12)

IPv4 support must me moved to a plugin.

Migrated from http://bugs.monkey-project.com/ticket/12

{
    "status": "closed", 
    "changetime": "2011-02-20T20:48:11", 
    "description": "IPv4 support must me moved to a plugin.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "wontfix", 
    "_ts": "1298234891249923", 
    "component": "HTTP", 
    "summary": "IPv4 Plugin", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-31T18:42:26", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

.htaccess (?) (Trac #30)

ES: Hola queria saber si funciona el tema de los '''.htaccess''' en monkey?
EN: Hi wanted to know if it works the subject of '''.htaccess''' in monkey?

Saludos

Migrated from http://bugs.monkey-project.com/ticket/30

{
    "status": "closed", 
    "changetime": "2011-02-02T10:29:11", 
    "description": "ES: Hola queria saber si funciona el tema de los '''.htaccess''' en monkey?\nEN: Hi wanted to know if it works the subject of '''.htaccess''' in monkey?\n\n\nSaludos", 
    "reporter": "mama21mama", 
    "cc": "", 
    "resolution": "invalid", 
    "_ts": "1296642551911032", 
    "component": "Security Plugin", 
    "summary": ".htaccess (?)", 
    "priority": "critical", 
    "keywords": "htaccess", 
    "version": "", 
    "time": "2011-02-02T07:03:15", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

systemd unit file for monkey http daemon (Trac #60)

Hi, I'd like to contribute this unit file to Monkey HTTP Daemon. Systemd is a new init system set to replace SysV init while offering lots of enhancements http://www.freedesktop.org/wiki/Software/systemd.

The unit file should be located at: /lib/systemd/system/monkeyd.service (or monkey.service, if that's better for you).

Here's the contents of this file.

[Unit]
Description=Monkey HTTP Daemon
Requires=network.target
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/monkey
PIDFile=/var/run/monkey.pid
Restart=always

[Install]
WantedBy=multi-user.target

Migrated from http://bugs.monkey-project.com/ticket/60

{
    "status": "assigned", 
    "changetime": "2013-02-23T17:46:00", 
    "description": "Hi, I'd like to contribute this unit file to Monkey HTTP Daemon. Systemd is a new init system set to replace SysV init while offering lots of enhancements <http://www.freedesktop.org/wiki/Software/systemd>.\n\nThe unit file should be located at: /lib/systemd/system/monkeyd.service (or monkey.service, if that's better for you).\n\nHere's the contents of this file.\n{{{\n[Unit]\nDescription=Monkey HTTP Daemon\nRequires=network.target\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=/usr/bin/monkey\nPIDFile=/var/run/monkey.pid\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n}}}", 
    "reporter": "phess", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1361641560165698", 
    "component": "Unspecified", 
    "summary": "systemd unit file for monkey http daemon", 
    "priority": "minor", 
    "keywords": "systemd, init", 
    "version": "", 
    "time": "2011-07-06T23:49:17", 
    "milestone": "1.2.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Add plugins selected list in configure (Trac #26)

When user runs configure script, this last should list the plugins that will be compiled and loaded by default, eg.:

./configure
....

Plugins to be compiled

[+] Liana
[+] Logger
[-] Dirlisting

'+' represents plugins loaded by default, '-' represent plugins compiled but commented in plugins.load file (not loaded by default.

Migrated from http://bugs.monkey-project.com/ticket/26

{
    "status": "closed", 
    "changetime": "2010-10-18T15:34:22", 
    "description": "When user runs configure script, this last should list the plugins that will be compiled and loaded by default, eg.:\n\n./configure\n....\n\nPlugins to be compiled\n======================\n[+] Liana\n[+] Logger\n[-] Dirlisting\n\n'+' represents plugins loaded by default, '-' represent plugins compiled but commented in plugins.load file (not loaded by default.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1287416062285945", 
    "component": "Configuration", 
    "summary": "Add plugins selected list in configure", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2010-10-07T16:43:51", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Load Balancing (Trac #22)

When Monkey starts, it launches N threads to process client requests, by now it uses a Round-Robin model to assign incoming connection.

The new Load Balancing model should determinate which thread has less active connections and assign the new one to it.

Migrated from http://bugs.monkey-project.com/ticket/22

{
    "status": "closed", 
    "changetime": "2010-11-15T18:00:36", 
    "description": "When Monkey starts, it launches N threads to process client requests, by now it uses a Round-Robin model to assign incoming connection.\n\nThe new Load Balancing model should determinate which thread has less active connections and assign the new one to it.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1289844036547516", 
    "component": "Scheduler", 
    "summary": "Load Balancing", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-24T10:46:12", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Merge configuration in monkey.conf (Trac #52)

Currently monkey looks for a directory which contains the full directory files for conf, mime types, plugins, vhosts, etc.

We have to determinate if we should/could integrate this inside the main monkey.conf referencing other files for the purpose, on this way when launching a new monkey http server it will require a new monkey.conf and not a new directory.

Should we support 'include' statements ?, we did it in the pass. We have to consider also do not to mess our cute configuration style.

Migrated from http://bugs.monkey-project.com/ticket/52

{
    "status": "new", 
    "changetime": "2012-04-18T16:35:30", 
    "description": "Currently monkey looks for a directory which contains the full directory files for conf, mime types, plugins, vhosts, etc. \n\nWe have to determinate if we should/could integrate this inside the main monkey.conf referencing other files for the purpose, on this way when launching a new monkey http server it will require a new monkey.conf and not a new directory.\n\nShould we support 'include' statements ?, we did it in the pass. We have to consider also do not to mess our cute configuration style.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1334766930613506", 
    "component": "Configuration", 
    "summary": "Merge configuration in monkey.conf", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2011-05-04T12:19:11", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "defect"
}

Palm server must support POST data greater thatn 65KB (Trac #19)

Current Palm implementation is not supporting more than 65KB in POST.

Proposed solution: when post data is greater that 65KB, launch a child process and write from parent.

Migrated from http://bugs.monkey-project.com/ticket/19

{
    "status": "closed", 
    "changetime": "2010-09-28T15:45:21", 
    "description": "Current Palm implementation is not supporting more than 65KB in POST.\n\nProposed solution: when post data is greater that 65KB, launch a child process and write from parent.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1285688721236622", 
    "component": "Palm Server", 
    "summary": "Palm server must support POST data greater thatn 65KB", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-24T10:18:49", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "defect"
}

QA script if_modified_since_test03.htt failed (Trac #7)

The following QA test script fails:

[ 17/28] if_modified_since_test03.htt => [FAILED]

Migrated from http://bugs.monkey-project.com/ticket/7

{
    "status": "closed", 
    "changetime": "2010-06-01T03:14:35", 
    "description": "The following QA test script fails:\n\n[ 17/28]  if_modified_since_test03.htt      => [FAILED]\n", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1275362075420836", 
    "component": "HTTP", 
    "summary": "QA script if_modified_since_test03.htt failed", 
    "priority": "major", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2010-05-27T19:34:16", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Websockets Support (Trac #39)

Websockets is a new standard to support bidirectional communication between HTTP clients and servers. Monkey should support websockets through a Plugin.

More details about websockets:

http://en.wikipedia.org/wiki/WebSockets
http://dev.w3.org/html5/websockets/
http://websocket.org/

Migrated from http://bugs.monkey-project.com/ticket/39

{
    "status": "closed", 
    "changetime": "2012-04-18T16:47:47", 
    "description": "Websockets is a new standard to support bidirectional communication between HTTP clients and servers. Monkey should support websockets through a Plugin. \n\nMore details about websockets:\n\n\nhttp://en.wikipedia.org/wiki/WebSockets\nhttp://dev.w3.org/html5/websockets/\nhttp://websocket.org/", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1334767667566026", 
    "component": "Unspecified", 
    "summary": "Websockets Support", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-27T00:37:58", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Banana process manager (Trac #34)

Banana script must be converted in a binary program which handle Monkey instances and can communicate to Cheetah shells.

New directory structure should be:

src/server/ (or src/core)
src/plugins/
src/banana/

Migrated from http://bugs.monkey-project.com/ticket/34

{
    "status": "accepted", 
    "changetime": "2011-10-03T12:50:49", 
    "description": "Banana script must be converted in a binary program which handle Monkey instances and can communicate to Cheetah shells. \n\nNew directory structure should be:\n\nsrc/server/ (or src/core)\nsrc/plugins/\nsrc/banana/", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1317646249724059", 
    "component": "Unspecified", 
    "summary": "Banana process manager", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-27T00:02:08", 
    "milestone": "", 
    "owner": "davidlohr", 
    "type": "enhancement"
}

Configure script: support enable "disable" plugins (Trac #21)

The configure script must support a new option to force enable compilation of DISABLED plugins, something like:

./configure --enable-plugins="liana_ssl pigmeo..."

Migrated from http://bugs.monkey-project.com/ticket/21

{
    "status": "closed", 
    "changetime": "2010-10-01T17:49:13", 
    "description": "The configure script must support a new option to force enable compilation of DISABLED plugins, something like:\n\n   ./configure --enable-plugins=\"liana_ssl pigmeo...\"\n", 
    "reporter": "edsiper", 
    "cc": "zeus", 
    "resolution": "fixed", 
    "_ts": "1285955353818379", 
    "component": "Configuration", 
    "summary": "Configure script: support enable \"disable\" plugins", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-24T10:28:11", 
    "milestone": "0.12.0", 
    "owner": "zeus", 
    "type": "enhancement"
}

chunked encoding in dirlisting is broken (Trac #74)

@ 0.20.0

It's not sending CRLF after data, thus IE6, curl, etc. refuse the connection.

Migrated from http://bugs.monkey-project.com/ticket/74

{
    "status": "closed", 
    "changetime": "2011-10-03T03:20:44", 
    "description": "@ 0.20.0\n\nIt's not sending CRLF after data, thus IE6, curl, etc. refuse the connection.\n", 
    "reporter": "gatling", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317612044491833", 
    "component": "Directory Listing Plugin", 
    "summary": "chunked encoding in dirlisting is broken", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-02T07:27:37", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

mk_utils_get_somaxconn (Trac #16)

mk_utils_get_somaxconn should read from /proc instead of using a hardcoded value.

Migrated from http://bugs.monkey-project.com/ticket/16

{
    "status": "closed", 
    "changetime": "2010-07-12T14:51:08", 
    "description": "mk_utils_get_somaxconn should read from /proc instead of using a hardcoded value.", 
    "reporter": "idostyle", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1278946268308845", 
    "component": "HTTP", 
    "summary": "mk_utils_get_somaxconn", 
    "priority": "minor", 
    "keywords": "utils somaxconn proc", 
    "version": "", 
    "time": "2010-07-12T13:20:45", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Detect non-writable logfiles for logger plugin (Trac #80)

The logger plugin of monkey does not inform about non-writable logfiles (error.log and access.log) - it would be a nice feature if the plugins puts an error message to stdout/master.log

Migrated from http://bugs.monkey-project.com/ticket/80

{
    "status": "closed", 
    "changetime": "2011-10-05T22:57:13", 
    "description": "The logger plugin of monkey does not inform about non-writable logfiles (error.log and access.log) - it would be a nice feature if the plugins puts an error message to stdout/master.log", 
    "reporter": "stdevel", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317855433912976", 
    "component": "Logger", 
    "summary": "Detect non-writable logfiles for logger plugin", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-05T17:35:44", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "enhancement"
}

undefined symbol: matrixSslLoadRsaKeys (Trac #53)

When running the development version of Monkey with libmatrixssl 3.1 (from our repository), the plugin fails with an undefined symbol error:

Monkey HTTP Daemon 0.14.0
Built : May 14 2011 08:48:38 (gcc 4.5.2)
Home : http://www.monkey-project.com

  • Process ID is 4885
  • Server socket listening on Port 2001
  • 5 threads, 101 client connections per thread, total 505
    bin/monkey: symbol lookup error: /home/edsiper/coding/monkey/plugins/liana_ssl/monkey-liana_ssl.so: undefined symbol: matrixSslLoadRsaKeys

Migrated from http://bugs.monkey-project.com/ticket/53

{
    "status": "closed", 
    "changetime": "2011-10-03T12:50:49", 
    "description": "When running the development version of Monkey with libmatrixssl 3.1 (from our repository), the plugin fails with an undefined symbol error:\n\nMonkey HTTP Daemon 0.14.0\nBuilt : May 14 2011 08:48:38 (gcc 4.5.2)\nHome  : http://www.monkey-project.com\n* Process ID is 4885\n* Server socket listening on Port 2001\n* 5 threads, 101 client connections per thread, total 505\nbin/monkey: symbol lookup error: /home/edsiper/coding/monkey/plugins/liana_ssl/monkey-liana_ssl.so: undefined symbol: matrixSslLoadRsaKeys\n", 
    "reporter": "edsiper", 
    "cc": "edsiper", 
    "resolution": "fixed", 
    "_ts": "1317646249724059", 
    "component": "Liana SSL Plugin", 
    "summary": "undefined symbol: matrixSslLoadRsaKeys", 
    "priority": "major", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2011-05-14T13:02:28", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

Best HTTP server ever! (Trac #1)

Deliver the more flexible and lightweight web server for Linux !

Migrated from http://bugs.monkey-project.com/ticket/1

{
    "status": "accepted", 
    "changetime": "2011-02-28T14:44:56", 
    "description": "Deliver the more flexible and lightweight web server for Linux !", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1298904296392054", 
    "component": "HTTP", 
    "summary": "Best HTTP server ever!", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T03:09:00", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "enhancement"
}

~100% cpu usage after having broken connection (Trac #77)

@ 0.20.0

e.g. run curl --limit-rate 1000 http://localhost/some.large.file -o /dev/null and abort it while running, immediately monkey starts to eat all of CPU time.

Migrated from http://bugs.monkey-project.com/ticket/77

{
    "status": "closed", 
    "changetime": "2011-10-03T00:51:42", 
    "description": "@ 0.20.0\n\ne.g. run `curl --limit-rate 1000 http://localhost/some.large.file -o /dev/null` and abort it while running, immediately monkey starts to eat all of CPU time.", 
    "reporter": "gatling", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317603102989100", 
    "component": "Unspecified", 
    "summary": "~100% cpu usage after having broken connection", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-02T07:58:23", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

Active connections counter (Trac #38)

Cheetah Shell must support a command which returns the active connections per worker thread, as well how long it has been running

Migrated from http://bugs.monkey-project.com/ticket/38

{
    "status": "closed", 
    "changetime": "2011-10-03T12:50:49", 
    "description": "Cheetah Shell must support a command which returns the active connections per worker thread, as well how long it has been running", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317646249724059", 
    "component": "Cheetah Plugin", 
    "summary": "Active connections counter", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-27T00:13:55", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Listen in Unix socket (Trac #4)

Currently the only way to use cheetah is using the Monkey process STDIN.
Cheetah should create a unix pipe allowing to connect through a client program.

Migrated from http://bugs.monkey-project.com/ticket/4

{
    "status": "closed", 
    "changetime": "2010-08-27T13:18:24", 
    "description": "Currently the only way to use cheetah is using the Monkey process STDIN.\nCheetah should create a unix pipe allowing to connect through a client program.\n", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1282915104985074", 
    "component": "Cheetah Plugin", 
    "summary": "Listen in Unix socket", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T12:49:23", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Double-linked list for plugins and core (Trac #18)

Migrated from http://bugs.monkey-project.com/ticket/18

{
    "status": "closed", 
    "changetime": "2010-09-21T19:48:31", 
    "description": "", 
    "reporter": "zeus", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1285098511752091", 
    "component": "Plugin API", 
    "summary": "Double-linked list for plugins and core", 
    "priority": "major", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2010-07-23T15:57:57", 
    "milestone": "0.12.0", 
    "owner": "zeus", 
    "type": "enhancement"
}

Double call of mk_sched_remove_client in mk_sched_check_timeouts (Trac #72)

When I testes monkey with 3 workers I detected strange behavour: sometimes I got near 42000 conn/sec, sometimes 28000 and sometimes 14000. Tracing shows that sometimes '''active_connection''' was became negative and this thread became not working. First, I made workaround in '''mk_sched_remove_client''':

   sched->active_connections--;

replaced by:

   if (sched->active_connections)
        sched->active_connections--;

Then I was find the place where '''active_connections''' can be decremented twice. There are 2 calls of '''mk_sched_remove_client''' in '''mk_sched_check_timeouts''': 1st time it called here:

/* PENDING CONN TIMEOUT */
for (i = 0; i < config->worker_capacity; i++) {
    if (sched->queue[i].status == MK_SCHEDULER_CONN_PENDING) {
        client_timeout = sched->queue[i].arrive_time + config->timeout;

        /* Check timeout */
        if (client_timeout <= log_current_utime) {
            MK_TRACE("Scheduler, closing fd %i due TIMEOUT", sched->queue[i].socket);
            mk_sched_remove_client(sched, sched->queue[i].socket);
        }
    }
}

2nd time can be called here:

   if (cs_node->status == MK_REQUEST_STATUS_INCOMPLETE) {
        if (cs_node->counter_connections == 0) {
            client_timeout = cs_node->init_time + config->timeout;
        }
        else {
            client_timeout = cs_node->init_time + config->keep_alive_timeout;
        }

        /* Check timeout */
        if (client_timeout <= log_current_utime) {
            MK_TRACE("[FD %i] Scheduler, closing due to timeout (incomplete)",
                     cs_node->socket);

            close(cs_node->socket);
            mk_sched_remove_client(sched, cs_node->socket);

Double decrement is possible because status '''cs_node->status == MK_REQUEST_STATUS_INCOMPLETE''' changed only in '''mk_conn_write''', but this status should be changed after client session was created (in '''mk_conn_read''').

Migrated from http://bugs.monkey-project.com/ticket/72

{
    "status": "closed", 
    "changetime": "2011-10-05T13:17:18", 
    "description": "When I testes monkey with 3 workers I detected strange behavour: sometimes I got near 42000 conn/sec, sometimes 28000 and sometimes 14000. Tracing shows that sometimes '''active_connection''' was became negative and this thread became not working. First, I made workaround in '''mk_sched_remove_client''':\n\n       sched->active_connections--;\n\nreplaced by:\n\n       if (sched->active_connections)\n            sched->active_connections--;\n\nThen I was find the place where '''active_connections''' can be decremented twice. There are 2 calls of '''mk_sched_remove_client''' in '''mk_sched_check_timeouts''': 1st time it called here:\n\n\n    /* PENDING CONN TIMEOUT */\n    for (i = 0; i < config->worker_capacity; i++) {\n        if (sched->queue[i].status == MK_SCHEDULER_CONN_PENDING) {\n            client_timeout = sched->queue[i].arrive_time + config->timeout;\n        \n            /* Check timeout */\n            if (client_timeout <= log_current_utime) {\n                MK_TRACE(\"Scheduler, closing fd %i due TIMEOUT\", sched->queue[i].socket);\n                mk_sched_remove_client(sched, sched->queue[i].socket);\n            }\n        }\n    }\n\n2nd time can be called here:\n\n       if (cs_node->status == MK_REQUEST_STATUS_INCOMPLETE) {\n            if (cs_node->counter_connections == 0) {\n                client_timeout = cs_node->init_time + config->timeout;\n            }\n            else {\n                client_timeout = cs_node->init_time + config->keep_alive_timeout;\n            }\n        \n            /* Check timeout */\n            if (client_timeout <= log_current_utime) {\n                MK_TRACE(\"[FD %i] Scheduler, closing due to timeout (incomplete)\",\n                         cs_node->socket);\n                \n                close(cs_node->socket);\n                mk_sched_remove_client(sched, cs_node->socket);\n\nDouble decrement is possible because status '''cs_node->status == MK_REQUEST_STATUS_INCOMPLETE''' changed only in '''mk_conn_write''', but this status should be changed after client session was created (in '''mk_conn_read''').\n\n", 
    "reporter": "sessa", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317820638343045", 
    "component": "Scheduler", 
    "summary": "Double call of mk_sched_remove_client in mk_sched_check_timeouts", 
    "priority": "critical", 
    "keywords": "", 
    "version": "", 
    "time": "2011-08-31T13:00:46", 
    "milestone": "0.13.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Plugin API stage 50 is not enabled, Monkey must call this stage. (Trac #5)

Plugin API stages, development branch uses stage 40 for object handlers, it should be 30 as described in http://repo.or.cz/w/MonkeyD.git/blob/refs/heads/v0.11.0-dev:/plugins/API.txt .

Also stage 50 is not being called

Migrated from http://bugs.monkey-project.com/ticket/5

{
    "status": "closed", 
    "changetime": "2010-05-29T12:52:19", 
    "description": "Plugin API stages, development branch uses stage 40 for object handlers, it should be 30 as described in http://repo.or.cz/w/MonkeyD.git/blob/refs/heads/v0.11.0-dev:/plugins/API.txt .\n\nAlso stage 50 is not being called\n", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1275137539146509", 
    "component": "Plugin API", 
    "summary": "Plugin API stage 50 is not enabled, Monkey must call this stage.", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T12:52:08", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "defect"
}

SSL - Poor performance (Trac #29)

liana_ssl is running very slow compared with liana. We need to determinate if is this normal or we have to fix something.

Migrated from http://bugs.monkey-project.com/ticket/29

{
    "status": "closed", 
    "changetime": "2010-12-28T12:05:09", 
    "description": "liana_ssl is running very slow compared with liana. We need to determinate if is this normal or we have to fix something.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "wontfix", 
    "_ts": "1293537909285803", 
    "component": "Liana SSL Plugin", 
    "summary": "SSL - Poor performance", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-11-15T01:15:15", 
    "milestone": "0.12.0", 
    "owner": "zeus", 
    "type": "defect"
}

Palm Post Method (Trac #10)

The current Palm implementation is not working properly when a post method is used in the server side.

Using PHP as an example, when the request contains a POST METHOD the PHP interpreter does not generate a Content-Type header making the Palm plugin waiting for ever.

Migrated from http://bugs.monkey-project.com/ticket/10

{
    "status": "closed", 
    "changetime": "2010-07-13T20:00:47", 
    "description": "The current Palm implementation is not working properly when a post method is used in the server side.\n\nUsing PHP as an example, when the request contains a POST METHOD the PHP interpreter does not generate a Content-Type header making the Palm plugin waiting for ever. ", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1279051247333799", 
    "component": "Palm Plugin", 
    "summary": "Palm Post Method", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-31T18:37:00", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Authentication Module (Trac #35)

Monkey must support basic authentication through a plugin.

We will use htpasswd format, but only supporting SHA1 encryption by now:

user1:{SHA1}base64_encode("password")
user2:{SHA1}base64_encode("password")

The initial version will apply the restriction to the whole server and virtualhost, in the incoming minor versions, we will implement more accurate restriction rules.

The tool to manage the user/password files will should be a fork of http://goo.gl/bWwZp . We need a customized tool for our purpose.

Migrated from http://bugs.monkey-project.com/ticket/35

{
    "status": "closed", 
    "changetime": "2011-10-03T12:50:49", 
    "description": "Monkey must support basic authentication through a plugin. \n\nWe will use htpasswd format, but only supporting SHA1 encryption by now:\n\nuser1:{SHA1}base64_encode(\"password\")\nuser2:{SHA1}base64_encode(\"password\")\n\nThe initial version will apply the restriction to the whole server and virtualhost, in the incoming minor versions, we will implement more accurate restriction rules.\n\nThe tool to manage the user/password files will should be a fork of http://goo.gl/bWwZp . We need a customized tool for our purpose.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317646249724059", 
    "component": "Unspecified", 
    "summary": "Authentication Module", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-27T00:06:19", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Back one directory level (Trac #28)

Dirlisting plugins does not show a "back one directory level" link

Migrated from http://bugs.monkey-project.com/ticket/28

{
    "status": "closed", 
    "changetime": "2010-11-17T03:00:45", 
    "description": "Dirlisting plugins does not show a \"back one directory level\" link", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1289962845505139", 
    "component": "Directory Listing Plugin", 
    "summary": "Back one directory level", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2010-11-15T01:14:02", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "defect"
}

dirlisting returns nothing for HTTP/1.0 request (Trac #76)

@ 0.20.0

e.g. curl -0 http://localhost/some/dir/ shows nothing for most of times; but sometimes it works. I'm not sure if the problem is in the plugin or not.

Migrated from http://bugs.monkey-project.com/ticket/76

{
    "status": "closed", 
    "changetime": "2011-10-03T00:57:37", 
    "description": "@ 0.20.0\n\ne.g. `curl -0 http://localhost/some/dir/` shows nothing for most of times; but sometimes it works. I'm not sure if the problem is in the plugin or not.", 
    "reporter": "gatling", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317603457294149", 
    "component": "Unspecified", 
    "summary": "dirlisting returns nothing for HTTP/1.0 request", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-02T07:51:30", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

Error in the balancing between workers (Trac #78)

In 0.20.0/0.20.1 we got new trror in the balancing between workers.
Now active_connections incremented in mk_conn_write on epoll write event.
This lead to overloading 1st worker if server accepts many concurrent connections.
The cause of overloading is asigning all incoming connections to 1st worker until active_connections will be increased in mk_conn_write.
I tested monkey server by Apache Benchmark with 200 concurrent requests and server can't stand such concurrency level.

In my test version I moved increment active_connections to _next_target() and made additional check to avoid active_connections became negative.
After this the balancing between workers was restored and server again can works with high concurrency level.

We have an idea to use atomic function (from GLIBC) for active_connections instead mutex which are too heavy for using in server loop.

Migrated from http://bugs.monkey-project.com/ticket/78

{
    "status": "closed", 
    "changetime": "2011-10-05T22:12:21", 
    "description": "In 0.20.0/0.20.1 we got new trror in the balancing between workers.\nNow active_connections incremented in mk_conn_write on epoll write event.\nThis lead to overloading 1st worker if server accepts many concurrent connections.\nThe cause of overloading is asigning all incoming connections to 1st worker until active_connections will be increased in mk_conn_write.\nI tested monkey server by Apache Benchmark with 200 concurrent requests and server can't stand such concurrency level.\n\nIn my test version I moved increment active_connections to _next_target() and made additional check to avoid active_connections became negative.\nAfter this the balancing between workers was restored and server again can works with high concurrency level.\n\nWe have an idea to use atomic function (from GLIBC) for active_connections instead mutex which are too heavy for using in server loop.", 
    "reporter": "sessa", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317852741266212", 
    "component": "Scheduler", 
    "summary": "Error in the balancing between workers", 
    "priority": "critical", 
    "keywords": "worker active connections", 
    "version": "0.10.1", 
    "time": "2011-10-04T17:04:20", 
    "milestone": "0.20", 
    "owner": "edsiper", 
    "type": "defect"
}

0.12.0-dev branch crash on 64 bits with simple request (Trac #25)

0.12.0 development branch crash on 64 bits, here's the gdb backtrace:

0x000000000040333a in mk_list_del (entry=0x200) at ./include/list.h:65
65 __mk_list_del(entry->prev, entry->next);
(gdb) bt
http://bugs.monkey-project.com/ticket/0 0x000000000040333a in mk_list_del (entry=0x200) at ./include/list.h:65
#1 0x0000000000404ddc in mk_request_free_list (cs=0x628d20) at request.c:825
#2 0x000000000040c8e6 in mk_http_request_end (socket=16) at http.c:741
#3 0x000000000040aa00 in mk_conn_write (socket=16) at connection.c:136
#4 0x0000000000408c5c in mk_epoll_init (efd=10, handler=0x61f6d0, max_events=202) at epoll.c:107
#5 0x0000000000409293 in mk_sched_launch_epoll_loop (thread_conf=0x61d300) at scheduler.c:172
#6 0x00007ffff79c19ca in start_thread () from /lib/libpthread.so.0
#7 0x00007ffff771e6fd in clone () from /lib/libc.so.6
#8 0x0000000000000000 in ?? ()

Migrated from http://bugs.monkey-project.com/ticket/25

{
    "status": "closed", 
    "changetime": "2010-09-29T19:35:51", 
    "description": "0.12.0 development branch crash on 64 bits, here's the gdb backtrace:\n\n0x000000000040333a in mk_list_del (entry=0x200) at ./include/list.h:65\n65\t    __mk_list_del(entry->prev, entry->next);\n(gdb) bt\n#0  0x000000000040333a in mk_list_del (entry=0x200) at ./include/list.h:65\n#1  0x0000000000404ddc in mk_request_free_list (cs=0x628d20) at request.c:825\n#2  0x000000000040c8e6 in mk_http_request_end (socket=16) at http.c:741\n#3  0x000000000040aa00 in mk_conn_write (socket=16) at connection.c:136\n#4  0x0000000000408c5c in mk_epoll_init (efd=10, handler=0x61f6d0, max_events=202) at epoll.c:107\n#5  0x0000000000409293 in mk_sched_launch_epoll_loop (thread_conf=0x61d300) at scheduler.c:172\n#6  0x00007ffff79c19ca in start_thread () from /lib/libpthread.so.0\n#7  0x00007ffff771e6fd in clone () from /lib/libc.so.6\n#8  0x0000000000000000 in ?? ()\n", 
    "reporter": "edsiper", 
    "cc": "zeus", 
    "resolution": "fixed", 
    "_ts": "1285788951379947", 
    "component": "HTTP", 
    "summary": "0.12.0-dev branch crash on 64 bits with simple request", 
    "priority": "blocker", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2010-09-29T14:19:55", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Events hooks (Trac #23)

Monkey plugin API must expose events hooks for sockets assigned to threads.

Migrated from http://bugs.monkey-project.com/ticket/23

{
    "status": "closed", 
    "changetime": "2010-10-18T12:14:31", 
    "description": "Monkey plugin API must expose events hooks for sockets assigned to threads.", 
    "reporter": "edsiper", 
    "cc": "zeus", 
    "resolution": "fixed", 
    "_ts": "1287404071035924", 
    "component": "Plugin API", 
    "summary": "Events hooks", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-29T01:15:02", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

access.log and error.log are not created automatically (Trac #79)

Hello monkey team,

as described here (http://lists.monkey-project.com/pipermail/monkey/2011-October/000653.html) log files access.log and error.log are not created automatically on the first start and have to be touched manually.

Greetings from germany,
Christian Stankowic [email protected]
http://www.stankowic-development.net

Migrated from http://bugs.monkey-project.com/ticket/79

{
    "status": "closed", 
    "changetime": "2011-10-05T22:14:24", 
    "description": "Hello monkey team,\n\nas described here (http://lists.monkey-project.com/pipermail/monkey/2011-October/000653.html) log files access.log and error.log are not created automatically on the first start and have to be touched manually.\n\n\n\nGreetings from germany,\nChristian Stankowic <[email protected]>\nhttp://www.stankowic-development.net", 
    "reporter": "stdevel", 
    "cc": "", 
    "resolution": "invalid", 
    "_ts": "1317852864584313", 
    "component": "Logger", 
    "summary": "access.log and error.log are not created automatically", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-05T06:41:24", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

SSL Support (Trac #17)

Build SSL plugin to give SSL support.

Target plugin name is "liana_ssl"

Migrated from http://bugs.monkey-project.com/ticket/17

{
    "status": "closed", 
    "changetime": "2010-12-18T15:42:33", 
    "description": "Build SSL plugin to give SSL support. \n\nTarget plugin name is \"liana_ssl\"", 
    "reporter": "zeus", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1292686953723711", 
    "component": "Unspecified", 
    "summary": "SSL Support", 
    "priority": "major", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2010-07-23T15:02:53", 
    "milestone": "0.12.0", 
    "owner": "zeus", 
    "type": "enhancement"
}

Lost getrlimit() call in user.c:110 (Trac #71)

Bold line was lost in original code:

/* Launched by root ? */
if (geteuid() == 0 && config->user) {
struct rlimit rl;

    '''getrlimit(RLIMIT_NOFILE, &rl);'''

    /* Just if i'm superuser */
    rl.rlim_cur = rl.rlim_max;
    if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
        mk_warn("setrlimit(RLIMIT_NOFILE) failed");
    }

Migrated from http://bugs.monkey-project.com/ticket/71

{
    "status": "closed", 
    "changetime": "2011-09-06T19:02:40", 
    "description": "Bold line was lost in original code:\n\n   /* Launched by root ? */\n    if (geteuid() == 0 && config->user) {\n        struct rlimit rl;\n\n        '''getrlimit(RLIMIT_NOFILE, &rl);'''\n\n        /* Just if i'm superuser */\n        rl.rlim_cur = rl.rlim_max;\n        if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {\n            mk_warn(\"setrlimit(RLIMIT_NOFILE) failed\");\n        }\n", 
    "reporter": "sessa", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1315335760688114", 
    "component": "Unspecified", 
    "summary": "Lost getrlimit() call in user.c:110", 
    "priority": "critical", 
    "keywords": "rlimit", 
    "version": "Development Branch", 
    "time": "2011-08-10T13:17:34", 
    "milestone": "0.13.0", 
    "owner": "sessa", 
    "type": "defect"
}

Move Logger to plugin (Trac #9)

The logger feature must be placed in a Plugin.

Migrated from http://bugs.monkey-project.com/ticket/9

{
    "status": "closed", 
    "changetime": "2010-06-23T22:24:55", 
    "description": "The logger feature must be placed in a Plugin.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1277331895010183", 
    "component": "Logger", 
    "summary": "Move Logger to plugin", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-31T18:35:09", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

New childs does not listen in Palm socket (Trac #11)

When the Palm server attends a request and then it finish, a new child is created, this child is not listening for incoming connections :/

Migrated from http://bugs.monkey-project.com/ticket/11

{
    "status": "closed", 
    "changetime": "2010-07-13T20:01:25", 
    "description": "When the Palm server attends a request and then it finish, a new child is created, this child is not listening for incoming connections :/", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1279051285444329", 
    "component": "Palm Server", 
    "summary": "New childs does not listen in Palm socket", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-31T18:40:15", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Indented configuration (Trac #8)

The development team has decided that Monkey 0.11.0 will include a new indented configuration similar as Python requires for coding.

It should be similar to:

[SERVER]
Port 2001
Listen 127.0.0.1
Workers 5
...

This new configuration must be applied to global monkey.conf and virtual host files.

Here's a proposal:

http://edsiper.linuxchile.cl/monkey_conf_proposal_01.png

Migrated from http://bugs.monkey-project.com/ticket/8

{
    "status": "closed", 
    "changetime": "2010-06-12T18:14:55", 
    "description": "The development team has decided that Monkey 0.11.0 will include a new indented configuration similar as Python requires for coding.\n\nIt should be similar to:\n\n[SERVER]\n     Port 2001\n     Listen 127.0.0.1\n     Workers 5\n     ...\n\nThis new configuration must be applied to global monkey.conf and virtual host files.\n\nHere's a proposal:\n\n   http://edsiper.linuxchile.cl/monkey_conf_proposal_01.png", 
    "reporter": "edsiper", 
    "cc": "zeus", 
    "resolution": "fixed", 
    "_ts": "1276366495242347", 
    "component": "Configuration", 
    "summary": "Indented configuration", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-31T18:33:38", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

SSL Negotiation hangs with redirection (Trac #32)

When using SSL and trying to retrieve a directory (in the redirection process) Monkey serves a binary data instead of the right headers

Steps to reproduce:

This bug is found in master branch and also previous versions 0.12.0, 0.12.1 and 0.12.2.

With Liana works properly.

Migrated from http://bugs.monkey-project.com/ticket/32

{
    "status": "closed", 
    "changetime": "2011-02-20T19:40:40", 
    "description": "When using SSL and trying to retrieve a directory (in the redirection process) Monkey serves a binary data instead of the right headers\n\nSteps to reproduce:\n\n - Enable Liana_SSL with port 2001\n - Retrieve the following URL: https://localhost:2001/imgs\n\nThis bug is found in master branch and also previous versions 0.12.0, 0.12.1 and 0.12.2.\n\nWith Liana works properly.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1298230840279063", 
    "component": "HTTP", 
    "summary": "SSL Negotiation hangs with redirection", 
    "priority": "critical", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2011-02-20T17:42:37", 
    "milestone": "Future Release", 
    "owner": "zeus", 
    "type": "defect"
}

Add "conf" directory to plugins (Trac #33)

Every plugin should have their own 'conf' directory in the sources, so when the configure script runs, it takes the content, replace paths and place them into global monkey configuration directory:

ls -l monkey/src/plugins/liana_ssl/conf/*

when run configure

mkdir monkey/conf/plugins/liana_ssl/
cp -r monkey/plugins/liana_ssl/conf* monkey/conf/plugins/liana_ssl/

this should work with --prefix value

Migrated from http://bugs.monkey-project.com/ticket/33

{
    "status": "closed", 
    "changetime": "2011-03-06T02:48:00", 
    "description": "Every plugin should have their own 'conf' directory in the sources, so when the configure script runs, it takes the content, replace paths and place them into global monkey configuration directory:\n\n ls -l monkey/src/plugins/liana_ssl/conf/*\n\n when run configure\n\n mkdir monkey/conf/plugins/liana_ssl/\n cp -r monkey/plugins/liana_ssl/conf* monkey/conf/plugins/liana_ssl/\n\nthis should work with --prefix value", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1299379680769729", 
    "component": "Configuration", 
    "summary": "Add \"conf\" directory to plugins", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-20T19:46:00", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Monkey as daemon, logger do not write log files (Trac #6)

When Monkey is launched as daemon using the -D option, the logger never writes to the logfiles when it serves some content

Migrated from http://bugs.monkey-project.com/ticket/6

{
    "status": "closed", 
    "changetime": "2010-06-01T13:59:24", 
    "description": "When Monkey is launched as daemon using the -D option, the logger never writes to the logfiles when it serves some content", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1275400764474626", 
    "component": "Logger", 
    "summary": "Monkey as daemon, logger do not write log files", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T12:53:46", 
    "milestone": "0.11.0", 
    "owner": "edsiper", 
    "type": "defect"
}

Write to pipe log using vmsplice() (Trac #3)

Linux kernel provides a syscall named vmsplice() which allows to write an
iov struct with zero copy to a pipe, we must use vmsplice() instead of
writev() for that procedure.

Migrated from http://bugs.monkey-project.com/ticket/3

{
    "status": "closed", 
    "changetime": "2011-09-06T19:05:21", 
    "description": "Linux kernel provides a syscall named vmsplice() which allows to write an\niov struct with zero copy to a pipe, we must use vmsplice() instead of\nwritev() for that procedure.\n", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "wontfix", 
    "_ts": "1315335921386186", 
    "component": "Logger", 
    "summary": "Write to pipe log using vmsplice()", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T12:48:30", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

VirtualHost Alias feature (Trac #55)

Monkey must support an "Alias" configuration directive under virtualhosts sections, e.g:

[HOST]
Servername xxx
DocumentRoot /xyz/
Alias /something1 /var/www/something1
Alias /something2 /var/www/something2

so the alias allows the internal mapping of different file system paths.

Migrated from http://bugs.monkey-project.com/ticket/55

{
    "status": "accepted", 
    "changetime": "2012-04-19T19:14:12", 
    "description": "Monkey must support an \"Alias\" configuration directive under virtualhosts sections, e.g:\n\n[HOST]\n    Servername xxx\n    DocumentRoot /xyz/\n    Alias /something1 /var/www/something1\n    Alias /something2 /var/www/something2\n\nso the alias allows the internal mapping of different file system paths.", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1334862852558443", 
    "component": "Virtual Host", 
    "summary": "VirtualHost Alias feature", 
    "priority": "minor", 
    "keywords": "", 
    "version": "Development Branch", 
    "time": "2011-06-06T14:56:24", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "defect"
}

Palm plugin is broken (Trac #37)

Current palm plugin is not compiling, some broken structure exists. No matters if is an experimental plugin it must be fixed

Migrated from http://bugs.monkey-project.com/ticket/37

{
    "status": "closed", 
    "changetime": "2011-10-03T12:50:49", 
    "description": "Current palm plugin is not compiling, some broken structure exists. No matters if is an experimental plugin it must be fixed", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317646249724059", 
    "component": "Palm Plugin", 
    "summary": "Palm plugin is broken", 
    "priority": "critical", 
    "keywords": "", 
    "version": "", 
    "time": "2011-02-27T00:10:21", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

Virtual Host Aliases (Trac #2)

Currently Monkey Virtual Host configuration just accepts one host name, it
must accept aliases in order to avoid to have N virtual hosts defined, eg:

Current:

ServerName www.somesite.com

Expected:

ServerName somesite.com www.somesite.com calendar.somesite.com

Migrated from http://bugs.monkey-project.com/ticket/2

{
    "status": "closed", 
    "changetime": "2011-03-15T12:35:00", 
    "description": "Currently Monkey Virtual Host configuration just accepts one host name, it\nmust accept aliases in order to avoid to have N virtual hosts defined, eg:\n\nCurrent:\n\nServerName www.somesite.com\n\nExpected:\n\nServerName somesite.com www.somesite.com calendar.somesite.com\n", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1300192500509654", 
    "component": "Virtual Host", 
    "summary": "Virtual Host Aliases", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-05-15T12:47:37", 
    "milestone": "0.12.0", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Server stops if a plugin is not linked correctly (Trac #82)

If the plugin calls a routine that is not included/linked correctly after the compilation, the server stops.
It would be better to:

  • raise a http 500 error (if the headers are not send allready)
  • log the error
  • print the error to stderr
  • and continue serving.

Example:
Somewhere in _mkp_stage_30:
struct mk_iov *iov_content;
if (..){
..
mk_iov_print(iov_content);
}
This compiles correctly, but when the server runs and the plugin is in stage 30:

symbol lookup error: /opt/monkey/plugins/monkey-TEST.so: undefined symbol: mk_iov_print

Migrated from http://bugs.monkey-project.com/ticket/82

{
    "status": "closed", 
    "changetime": "2011-10-11T17:27:13", 
    "description": "If the plugin calls a routine that is not included/linked correctly after the compilation, the server stops.\nIt would be better to:\n- raise a http 500 error (if the headers are not send allready)\n- log the error\n- print the error to stderr\n- and continue serving. \n\nExample:\nSomewhere in  _mkp_stage_30:\n\tstruct mk_iov *iov_content;\n\tif (..){\n\t\t..\n\t\tmk_iov_print(iov_content);\n\t}\nThis compiles correctly, but when the server runs and the plugin is in stage 30:\n\nsymbol lookup error: /opt/monkey/plugins/monkey-TEST.so: undefined symbol: mk_iov_print\n\t\t", 
    "reporter": "peter.josee", 
    "cc": "", 
    "resolution": "wontfix", 
    "_ts": "1318354033932671", 
    "component": "Plugin API", 
    "summary": "Server stops if a plugin is not linked correctly", 
    "priority": "minor", 
    "keywords": "plugin http500", 
    "version": "", 
    "time": "2011-10-11T08:42:34", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "enhancement"
}

RewriteRule (Trac #31)

[http://t.text0.tk/fH texto mas extenso]

Some URLs are better considered by the search engines like Google than others. This was something we discussed in our web promotion manual. For example, how are you URLs are not very attractive for the promotion of pages:

www.dominio.com/articulos/muestra.php?id=23
www.dominio.com/pueblos/pueblo.php?nombre=torrelodones

Although a URL with parameters has specific content, search engines do not score as well as being the same content with URLs without passing parameters.

www.dominio.com/articulos/23.php
www.dominio.com / towns / torrelodones.php

Even Article 23.php direction could be better if it included in the URL itself some keyword, for example, if the article talks about vintage cars, a better direction would be:

www.dominio.com / articles / coches_antiguos.php

Reference: in our search engine optimization manual explain in detail the advantages of using a search engine friendly URLs.

When you see a URL like this, it seems as if the web server in the directory items we had a document called coches_antiguos.php. In principle should be that way so that this address is correct and not throw a 404 error page not found. Now imagine we have hundreds or thousands of items. Then we should have in the directory corresponding items hundreds or thousands of files. This is not very optimal in order to maintain the page, because every time you publish an article should create the corresponding file on the server in the appropriate directory.

You may already know about this idea of search engine friendly URLs, but now we will discuss on how to perform file support. Htaccess and RewriteRule statement. This can easily create URLs on the server without that correspond to documents in its own directory structure. That is, Apache will be able to provide URLs that do not exist on the server, causing the redirection to other files and processed by PHP, or other compatible programming language to display some content or other depending on the URL you are trying to access .

The inclusion of keywords within URLs and navigate around passing parameters, all in the htaccess is a technique increasingly used, we must know and use to our site is easy to promote in search engines.

The. Htaccess is a text file of Apache itself, which is placed in any of the directories published web server and affects the directory where you placed and all its subdirectories. Con. Htaccess can be configured many different topics for these directories, without having to touch the Apache httpd.conf file, where general settings are stored on the server.

We will explain the use of the RewriteRule statement, but htaccess is used to configure many other issues.

You can learn more about. Htaccess in http://www.desarrolloweb.com/articulos/introduccion-htaccess.html

Migrated from http://bugs.monkey-project.com/ticket/31

{
    "status": "assigned", 
    "changetime": "2011-03-07T15:14:17", 
    "description": "[http://t.text0.tk/fH texto mas extenso]\n\nSome URLs are better considered by the search engines like Google than others. This was something we discussed in our web promotion manual. For example, how are you URLs are not very attractive for the promotion of pages:\n\nwww.dominio.com/articulos/muestra.php?id=23\nwww.dominio.com/pueblos/pueblo.php?nombre=torrelodones\n\nAlthough a URL with parameters has specific content, search engines do not score as well as being the same content with URLs without passing parameters.\n\nwww.dominio.com/articulos/23.php\nwww.dominio.com / towns / torrelodones.php\n\nEven Article 23.php direction could be better if it included in the URL itself some keyword, for example, if the article talks about vintage cars, a better direction would be:\n\nwww.dominio.com / articles / coches_antiguos.php\n\nReference: in our search engine optimization manual explain in detail the advantages of using a search engine friendly URLs.\n\nWhen you see a URL like this, it seems as if the web server in the directory items we had a document called coches_antiguos.php. In principle should be that way so that this address is correct and not throw a 404 error page not found. Now imagine we have hundreds or thousands of items. Then we should have in the directory corresponding items hundreds or thousands of files. This is not very optimal in order to maintain the page, because every time you publish an article should create the corresponding file on the server in the appropriate directory.\n\nYou may already know about this idea of search engine friendly URLs, but now we will discuss on how to perform file support. Htaccess and RewriteRule statement. This can easily create URLs on the server without that correspond to documents in its own directory structure. That is, Apache will be able to provide URLs that do not exist on the server, causing the redirection to other files and processed by PHP, or other compatible programming language to display some content or other depending on the URL you are trying to access .\n\nThe inclusion of keywords within URLs and navigate around passing parameters, all in the htaccess is a technique increasingly used, we must know and use to our site is easy to promote in search engines.\n\nThe. Htaccess is a text file of Apache itself, which is placed in any of the directories published web server and affects the directory where you placed and all its subdirectories. Con. Htaccess can be configured many different topics for these directories, without having to touch the Apache httpd.conf file, where general settings are stored on the server.\n\nWe will explain the use of the RewriteRule statement, but htaccess is used to configure many other issues.\n\nYou can learn more about. Htaccess in http://www.desarrolloweb.com/articulos/introduccion-htaccess.html", 
    "reporter": "mama21mama", 
    "cc": "", 
    "resolution": "", 
    "_ts": "1299510857794093", 
    "component": "Unspecified", 
    "summary": "RewriteRule", 
    "priority": "major", 
    "keywords": "RewriteRule", 
    "version": "Development Branch", 
    "time": "2011-02-02T11:49:26", 
    "milestone": "Future Release", 
    "owner": "zeus", 
    "type": "enhancement"
}

Palm Setup How To (Trac #20)

Is required to add a Palm setup/how to information in the main documentation

Migrated from http://bugs.monkey-project.com/ticket/20

{
    "status": "closed", 
    "changetime": "2013-02-16T19:38:33", 
    "description": "Is required to add a Palm setup/how to information in the main documentation", 
    "reporter": "edsiper", 
    "cc": "", 
    "resolution": "wontfix", 
    "_ts": "1361043513716018", 
    "component": "Documentation", 
    "summary": "Palm Setup How To", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2010-09-24T10:20:24", 
    "milestone": "Future Release", 
    "owner": "edsiper", 
    "type": "enhancement"
}

Can't set to non-blocking the socket when compiled with ACCEPT_GENERIC (Trac #51)

The problem is most likely that in liana.c line 61

(fcntl(server_fd, F_SETFL, fcntl(remote_fd, F_GETFD, 0) | O_NONBLOCK) == -1)

should be:

(fcntl(remote_fd, F_SETFL, fcntl(remote_fd, F_GETFD, 0) | O_NONBLOCK) == -1)

Migrated from http://bugs.monkey-project.com/ticket/51

{
    "status": "closed", 
    "changetime": "2011-03-30T21:23:55", 
    "description": "The problem is most likely that in liana.c line 61\n\n(fcntl(server_fd, F_SETFL, fcntl(remote_fd, F_GETFD, 0) | O_NONBLOCK) == -1) \n\nshould be:\n\n(fcntl(remote_fd, F_SETFL, fcntl(remote_fd, F_GETFD, 0) | O_NONBLOCK) == -1) \n\n", 
    "reporter": "pgas", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1301520235310662", 
    "component": "Unspecified", 
    "summary": "Can't set to non-blocking the socket when compiled with ACCEPT_GENERIC", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-03-30T17:50:30", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

dirlisting is unusable on some filesystems (Trac #75)

@ 0.20.0

Because only ext? and btr (and some more) supports d_type, others don't.

With the patch it fails to detect directories (of course), but at least it partially works now.

Migrated from http://bugs.monkey-project.com/ticket/75

{
    "status": "closed", 
    "changetime": "2011-10-03T12:49:58", 
    "description": "@ 0.20.0\n\nBecause only ext? and btr (and some more) supports d_type, others don't.\n\nWith the patch it fails to detect directories (of course), but at least it partially works now.", 
    "reporter": "gatling", 
    "cc": "", 
    "resolution": "fixed", 
    "_ts": "1317646198745073", 
    "component": "Directory Listing Plugin", 
    "summary": "dirlisting is unusable on some filesystems", 
    "priority": "major", 
    "keywords": "", 
    "version": "", 
    "time": "2011-10-02T07:38:16", 
    "milestone": "", 
    "owner": "edsiper", 
    "type": "defect"
}

Wrong month in mk_print (Trac #73)

Change line utils.c:472

< current->tm_mon,

     current->tm_mon + 1,

Migrated from http://bugs.monkey-project.com/ticket/73

{
    "status": "closed", 
    "changetime": "2011-09-04T02:22:47", 
    "description": "Change line utils.c:472\n\n<          current->tm_mon,\n\n>          current->tm_mon + 1,", 
    "reporter": "sessa", 
    "cc": "[email protected]", 
    "resolution": "fixed", 
    "_ts": "1315102967130502", 
    "component": "Unspecified", 
    "summary": "Wrong month in mk_print", 
    "priority": "minor", 
    "keywords": "", 
    "version": "", 
    "time": "2011-08-31T13:17:59", 
    "milestone": "0.13.0", 
    "owner": "sessa", 
    "type": "defect"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.