Skip to content

Commit 7c27c56

Browse files
committed
init
0 parents  commit 7c27c56

File tree

11 files changed

+691
-0
lines changed

11 files changed

+691
-0
lines changed

LICENSE.md

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
Open Software License ("OSL") v. 3.0
2+
3+
This Open Software License (the "License") applies to any original work of
4+
authorship (the "Original Work") whose owner (the "Licensor") has placed the
5+
following licensing notice adjacent to the copyright notice for the Original
6+
Work:
7+
8+
Licensed under the Open Software License version 3.0
9+
10+
1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free,
11+
non-exclusive, sublicensable license, for the duration of the copyright, to do
12+
the following:
13+
14+
a) to reproduce the Original Work in copies, either alone or as part of a
15+
collective work;
16+
17+
b) to translate, adapt, alter, transform, modify, or arrange the Original
18+
Work, thereby creating derivative works ("Derivative Works") based upon the
19+
Original Work;
20+
21+
c) to distribute or communicate copies of the Original Work and Derivative
22+
Works to the public, with the proviso that copies of Original Work or
23+
Derivative Works that You distribute or communicate shall be licensed under
24+
this Open Software License;
25+
26+
d) to perform the Original Work publicly; and
27+
28+
e) to display the Original Work publicly.
29+
30+
2) Grant of Patent License. Licensor grants You a worldwide, royalty-free,
31+
non-exclusive, sublicensable license, under patent claims owned or controlled
32+
by the Licensor that are embodied in the Original Work as furnished by the
33+
Licensor, for the duration of the patents, to make, use, sell, offer for sale,
34+
have made, and import the Original Work and Derivative Works.
35+
36+
3) Grant of Source Code License. The term "Source Code" means the preferred
37+
form of the Original Work for making modifications to it and all available
38+
documentation describing how to modify the Original Work. Licensor agrees to
39+
provide a machine-readable copy of the Source Code of the Original Work along
40+
with each copy of the Original Work that Licensor distributes. Licensor
41+
reserves the right to satisfy this obligation by placing a machine-readable
42+
copy of the Source Code in an information repository reasonably calculated to
43+
permit inexpensive and convenient access by You for as long as Licensor
44+
continues to distribute the Original Work.
45+
46+
4) Exclusions From License Grant. Neither the names of Licensor, nor the names
47+
of any contributors to the Original Work, nor any of their trademarks or
48+
service marks, may be used to endorse or promote products derived from this
49+
Original Work without express prior permission of the Licensor. Except as
50+
expressly stated herein, nothing in this License grants any license to
51+
Licensor's trademarks, copyrights, patents, trade secrets or any other
52+
intellectual property. No patent license is granted to make, use, sell, offer
53+
for sale, have made, or import embodiments of any patent claims other than the
54+
licensed claims defined in Section 2. No license is granted to the trademarks
55+
of Licensor even if such marks are included in the Original Work. Nothing in
56+
this License shall be interpreted to prohibit Licensor from licensing under
57+
terms different from this License any Original Work that Licensor otherwise
58+
would have a right to license.
59+
60+
5) External Deployment. The term "External Deployment" means the use,
61+
distribution, or communication of the Original Work or Derivative Works in any
62+
way such that the Original Work or Derivative Works may be used by anyone
63+
other than You, whether those works are distributed or communicated to those
64+
persons or made available as an application intended for use over a network.
65+
As an express condition for the grants of license hereunder, You must treat
66+
any External Deployment by You of the Original Work or a Derivative Work as a
67+
distribution under section 1(c).
68+
69+
6) Attribution Rights. You must retain, in the Source Code of any Derivative
70+
Works that You create, all copyright, patent, or trademark notices from the
71+
Source Code of the Original Work, as well as any notices of licensing and any
72+
descriptive text identified therein as an "Attribution Notice." You must cause
73+
the Source Code for any Derivative Works that You create to carry a prominent
74+
Attribution Notice reasonably calculated to inform recipients that You have
75+
modified the Original Work.
76+
77+
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
78+
the copyright in and to the Original Work and the patent rights granted herein
79+
by Licensor are owned by the Licensor or are sublicensed to You under the
80+
terms of this License with the permission of the contributor(s) of those
81+
copyrights and patent rights. Except as expressly stated in the immediately
82+
preceding sentence, the Original Work is provided under this License on an "AS
83+
IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without
84+
limitation, the warranties of non-infringement, merchantability or fitness for
85+
a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK
86+
IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this
87+
License. No license to the Original Work is granted by this License except
88+
under this disclaimer.
89+
90+
8) Limitation of Liability. Under no circumstances and under no legal theory,
91+
whether in tort (including negligence), contract, or otherwise, shall the
92+
Licensor be liable to anyone for any indirect, special, incidental, or
93+
consequential damages of any character arising as a result of this License or
94+
the use of the Original Work including, without limitation, damages for loss
95+
of goodwill, work stoppage, computer failure or malfunction, or any and all
96+
other commercial damages or losses. This limitation of liability shall not
97+
apply to the extent applicable law prohibits such limitation.
98+
99+
9) Acceptance and Termination. If, at any time, You expressly assented to this
100+
License, that assent indicates your clear and irrevocable acceptance of this
101+
License and all of its terms and conditions. If You distribute or communicate
102+
copies of the Original Work or a Derivative Work, You must make a reasonable
103+
effort under the circumstances to obtain the express assent of recipients to
104+
the terms of this License. This License conditions your rights to undertake
105+
the activities listed in Section 1, including your right to create Derivative
106+
Works based upon the Original Work, and doing so without honoring these terms
107+
and conditions is prohibited by copyright law and international treaty.
108+
Nothing in this License is intended to affect copyright exceptions and
109+
limitations (including "fair use" or "fair dealing"). This License shall
110+
terminate immediately and You may no longer exercise any of the rights granted
111+
to You by this License upon your failure to honor the conditions in Section
112+
1(c).
113+
114+
10) Termination for Patent Action. This License shall terminate automatically
115+
and You may no longer exercise any of the rights granted to You by this
116+
License as of the date You commence an action, including a cross-claim or
117+
counterclaim, against Licensor or any licensee alleging that the Original Work
118+
infringes a patent. This termination provision shall not apply for an action
119+
alleging patent infringement by combinations of the Original Work with other
120+
software or hardware.
121+
122+
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
123+
License may be brought only in the courts of a jurisdiction wherein the
124+
Licensor resides or in which Licensor conducts its primary business, and under
125+
the laws of that jurisdiction excluding its conflict-of-law provisions. The
126+
application of the United Nations Convention on Contracts for the
127+
International Sale of Goods is expressly excluded. Any use of the Original
128+
Work outside the scope of this License or after its termination shall be
129+
subject to the requirements and penalties of copyright or patent law in the
130+
appropriate jurisdiction. This section shall survive the termination of this
131+
License.
132+
133+
12) Attorneys' Fees. In any action to enforce the terms of this License or
134+
seeking damages relating thereto, the prevailing party shall be entitled to
135+
recover its costs and expenses, including, without limitation, reasonable
136+
attorneys' fees and costs incurred in connection with such action, including
137+
any appeal of such action. This section shall survive the termination of this
138+
License.
139+
140+
13) Miscellaneous. If any provision of this License is held to be
141+
unenforceable, such provision shall be reformed only to the extent necessary
142+
to make it enforceable.
143+
144+
14) Definition of "You" in This License. "You" throughout this License,
145+
whether in upper or lower case, means an individual or a legal entity
146+
exercising rights under, and complying with all of the terms of, this License.
147+
For legal entities, "You" includes any entity that controls, is controlled by,
148+
or is under common control with you. For purposes of this definition,
149+
"control" means (i) the power, direct or indirect, to cause the direction or
150+
management of such entity, whether by contract or otherwise, or (ii) ownership
151+
of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
152+
ownership of such entity.
153+
154+
15) Right to Use. You may use the Original Work in all ways not otherwise
155+
restricted or conditioned by this License or by law, and Licensor promises not
156+
to interfere with or be responsible for such uses by You.
157+
158+
16) Modification of This License. This License is Copyright © 2005 Lawrence
159+
Rosen. Permission is granted to copy, distribute, or communicate this License
160+
without modification. Nothing in this License permits You to modify this
161+
License as applied to the Original Work or to Derivative Works. However, You
162+
may modify the text of this License and copy, distribute or communicate your
163+
modified version (the "Modified License") and apply it to other original works
164+
of authorship subject to the following conditions: (i) You may not indicate in
165+
any way that your Modified License is the "Open Software License" or "OSL" and
166+
you may not use those names in the name of your Modified License; (ii) You
167+
must replace the notice specified in the first paragraph above with the notice
168+
"Licensed under hirale" or with a notice of your own
169+
that is not confusingly similar to the notice in this License; and (iii) You
170+
may not claim that your original works are open source software unless your
171+
Modified License has been approved by Open Source Initiative (OSI) and You
172+
comply with its license review and certification process.

README.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# Hirale Redis Queue Module
2+
3+
A module using Redis Stream to process asynchronous tasks.
4+
5+
6+
## Install
7+
8+
### Install with [Magento Composer Installer](https://github.com/Cotya/magento-composer-installer)
9+
10+
```bash
11+
composer require hirale/openmage-redis-queue:dev-master
12+
```
13+
14+
## Usage
15+
16+
### Setup
17+
18+
Go to openmage system config `System > Configuration > System > Hirale Redis Queue Settings`.
19+
20+
![System > Configuration > System > Hirale Redis Queue Settings](image.png)
21+
22+
### Quick start example
23+
24+
1. Create a new module, name it `Hirale_QueueExample`.
25+
`app/etc/modules/Hirale_QueueExample.xml`
26+
``` xml
27+
<?xml version="1.0"?>
28+
<config>
29+
<modules>
30+
<Hirale_QueueExample>
31+
<active>true</active>
32+
<codePool>local</codePool>
33+
<depends>
34+
<Hirale_Queue />
35+
</depends>
36+
</Hirale_QueueExample>
37+
</modules>
38+
</config>
39+
```
40+
2. Create `app/code/local/Hirale/QueueExample/etc/config.xml`.
41+
```xml
42+
<?xml version="1.0"?>
43+
<config>
44+
<modules>
45+
<Hirale_QueueExample>
46+
<version>1.0.0</version>
47+
</Hirale_QueueExample>
48+
</modules>
49+
<global>
50+
<models>
51+
<hirale_queue_example>
52+
<class>Hirale_QueueExample_Model</class>
53+
</hirale_queue_example>
54+
</models>
55+
<events>
56+
<controller_front_send_response_before>
57+
<observers>
58+
<hirale_queue_example_send_response_after>
59+
<type>singleton</type>
60+
<class>hirale_queue_example/observer</class>
61+
<method>testExample</method>
62+
</hirale_queue_example_send_response_after>
63+
</observers>
64+
</controller_front_send_response_before>
65+
</events>
66+
</global>
67+
</config>
68+
```
69+
3. Creat a new task hanlder that implements `Hirale_Queue_Model_TaskHandlerInterface` class.
70+
`app/code/local/Hirale/QueueExample/Model/TestHandler.php`
71+
```php
72+
<?php
73+
class Hirale_QueueExample_Model_TestHandler implements Hirale_Queue_Model_TaskHandlerInterface
74+
{
75+
76+
public function handle($data)
77+
{
78+
Mage::log($data['id'] . ': ' . print_r($data, true), Zend_Log::INFO, 'example.log');
79+
}
80+
}
81+
```
82+
83+
4. Create Observer to get the data from a event and add it to queue.
84+
`app/code/local/Hirale/QueueExample/Model/Observer.php`
85+
```php
86+
<?php
87+
class Hirale_QueueExample_Model_Observer
88+
{
89+
public function testExample(Varien_Event_Observer $observer)
90+
{
91+
$currentRoute = $observer->getEvent()->getFront();
92+
Mage::getModel('hirale_queue/task')->addTask('Hirale_QueueExample_Model_TestHandler',
93+
['route' => $currentRoute->getRequest()->getRequestString()]);
94+
}
95+
}
96+
```
97+
5. Clean cache and check examle.log, make sure your cron is running.
98+
``` log
99+
2024-06-09T14:39:01+00:00 INFO (6): 1717943907550-0: Array
100+
(
101+
[id] => 1717943907550-0
102+
[handler] => Hirale_QueueExample_Model_TestHandler
103+
[data] => Array
104+
(
105+
[route] => /admin/customer/index/key/5232c0583f633e8d8d8c349ebb4639db/
106+
)
107+
108+
[retry_count] => 3
109+
[retry_delay] => 60
110+
[timeout] => 60
111+
)
112+
113+
2024-06-09T15:04:02+00:00 INFO (6): 1717945421857-0: Array
114+
(
115+
[id] => 1717945421857-0
116+
[handler] => Hirale_QueueExample_Model_TestHandler
117+
[data] => Array
118+
(
119+
[route] => /admin/customer/index/key/5232c0583f633e8d8d8c349ebb4639db/
120+
)
121+
122+
[retry_count] => 3
123+
[retry_delay] => 60
124+
[timeout] => 60
125+
)
126+
```
127+
128+
## License
129+
130+
The Open Software License v. 3.0 (OSL-3.0). Please see [License File](LICENSE.md) for more information.

composer.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"name": "hirale/openmage-redis-queue",
3+
"description": "A simple redis queue module for openmage",
4+
"type": "magento-module",
5+
"license": "OSL-3.0",
6+
"keywords": [
7+
"magento",
8+
"magento1",
9+
"openmage",
10+
"queue",
11+
"redis"
12+
],
13+
"require": {
14+
"php": "^8.0",
15+
"magento-hackathon/magento-composer-installer": "*",
16+
"predis/predis": "*"
17+
},
18+
"authors": [
19+
{
20+
"name": "Hirale"
21+
}
22+
],
23+
"config": {
24+
"allow-plugins": {
25+
"cweagans/composer-patches": true
26+
}
27+
},
28+
"extra": {
29+
"map": [
30+
[
31+
"src/app/etc/modules/Hirale_Queue.xml",
32+
"app/etc/modules/Hirale_Queue.xml"
33+
],
34+
[
35+
"src/app/code/community/Hirale/Queue",
36+
"app/code/community/Hirale/Queue"
37+
]
38+
]
39+
}
40+
}

image.png

47.2 KB
Loading
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
use Predis\Client;
3+
4+
class Hirale_Queue_Helper_Data extends Mage_Core_Helper_Abstract
5+
{
6+
private static $_redis;
7+
8+
9+
/**
10+
* Retrieves the Redis client instance.
11+
*
12+
* This function checks if the Redis client instance has already been created.
13+
* If it has not, it retrieves the Redis configuration from the Magento system configuration.
14+
* The configuration includes the host, scheme, port, and database.
15+
* It then creates a new Redis client instance using the retrieved configuration.
16+
*
17+
* @return Client The Redis client instance.
18+
*/
19+
20+
public function getRedis()
21+
{
22+
if (!self::$_redis) {
23+
$host = Mage::getStoreConfig('system/hirale_queue/host') ?: 'localhost';
24+
$scheme = Mage::getStoreConfig('system/hirale_queue/scheme') ?: 'tcp';
25+
$port = Mage::getStoreConfig('system/hirale_queue/port') ?: 6379;
26+
$database = Mage::getStoreConfig('system/hirale_queue/database') ?: 0;
27+
28+
self::$_redis = new Client([
29+
'scheme' => $scheme,
30+
'host' => $host,
31+
'port' => $port,
32+
'database' => $database
33+
]);
34+
}
35+
36+
return self::$_redis;
37+
}
38+
}

0 commit comments

Comments
 (0)